diff --git a/common/geodata/decode.go b/common/geodata/decode.go index 7a8ab9b58..8153c3d52 100644 --- a/common/geodata/decode.go +++ b/common/geodata/decode.go @@ -11,13 +11,13 @@ package geodata import ( "io" - "os" "runtime" "strings" "google.golang.org/protobuf/encoding/protowire" "github.com/v2fly/v2ray-core/v4/common/errors" + "github.com/v2fly/v2ray-core/v4/common/platform/filesystem" ) //go:generate go run github.com/v2fly/v2ray-core/v4/common/errors/errorgen @@ -30,7 +30,7 @@ var ( errCodeNotFound = errors.New("code not found") ) -func emitBytes(f *os.File, code string) ([]byte, error) { +func emitBytes(f io.ReadSeeker, code string) ([]byte, error) { count := 1 isInner := false tempContainer := make([]byte, 0, 5) @@ -107,7 +107,7 @@ Loop: } func Decode(filename, code string) ([]byte, error) { - f, err := os.Open(filename) + f, err := filesystem.NewFileSeeker(filename) if err != nil { return nil, newError("failed to open file: ", filename).Base(err) } diff --git a/common/platform/filesystem/file.go b/common/platform/filesystem/file.go index 440c848d0..d171019d9 100644 --- a/common/platform/filesystem/file.go +++ b/common/platform/filesystem/file.go @@ -8,10 +8,16 @@ import ( "github.com/v2fly/v2ray-core/v4/common/platform" ) +type FileSeekerFunc func(path string) (io.ReadSeekCloser, error) + type FileReaderFunc func(path string) (io.ReadCloser, error) type FileWriterFunc func(path string) (io.WriteCloser, error) +var NewFileSeeker FileSeekerFunc = func(path string) (io.ReadSeekCloser, error) { + return os.Open(path) +} + var NewFileReader FileReaderFunc = func(path string) (io.ReadCloser, error) { return os.Open(path) }