From 629f99e19e095a85254d12fb5ad73b97d2cb4e7d Mon Sep 17 00:00:00 2001 From: HystericalDragon Date: Sun, 17 Dec 2023 10:18:42 +0800 Subject: [PATCH] refactor(libcore): remove old APIs (#490) Signed-off-by: HystericalDragon --- libcore/assets_android.go | 5 ++-- libcore/go.mod | 5 +--- libcore/go.sum | 9 ------- libcore/io.go | 50 ++++++++++++++++++++++++++++++++++----- 4 files changed, 47 insertions(+), 22 deletions(-) diff --git a/libcore/assets_android.go b/libcore/assets_android.go index f0625ee..c3c9831 100644 --- a/libcore/assets_android.go +++ b/libcore/assets_android.go @@ -5,7 +5,6 @@ package libcore import ( "fmt" "io" - "io/ioutil" "log" "os" "path/filepath" @@ -66,7 +65,7 @@ func extractAssetName(name string, useOfficialAssets bool) error { if err != nil { return fmt.Errorf("open version in assets: %v", err) } - b, err := ioutil.ReadAll(av) + b, err := io.ReadAll(av) av.Close() if err != nil { return fmt.Errorf("read internal version: %v", err) @@ -85,7 +84,7 @@ func extractAssetName(name string, useOfficialAssets bool) error { doExtract = true } else if useOfficialAssets || !replaceable { // 官方源升级 - b, err := ioutil.ReadFile(dir + version) + b, err := os.ReadFile(dir + version) if err != nil { // versionFileMissing doExtract = true diff --git a/libcore/go.mod b/libcore/go.mod index ba46284..5492505 100644 --- a/libcore/go.mod +++ b/libcore/go.mod @@ -1,9 +1,8 @@ module libcore -go 1.18 +go 1.20 require ( - github.com/codeclysm/extract v2.2.0+incompatible github.com/matsuridayo/libneko v1.0.0 // replaced github.com/matsuridayo/sing-box-extra v1.0.0 // replaced github.com/miekg/dns v1.1.56 @@ -33,12 +32,10 @@ require ( github.com/golang/protobuf v1.5.3 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect - github.com/h2non/filetype v1.1.3 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/insomniacslk/dhcp v0.0.0-20231016090811-6a2c8fbdcc1c // indirect github.com/josharian/native v1.1.0 // indirect - github.com/juju/errors v1.0.0 // indirect github.com/klauspost/compress v1.15.15 // indirect github.com/klauspost/cpuid/v2 v2.2.5 // indirect github.com/libdns/alidns v1.0.3 // indirect diff --git a/libcore/go.sum b/libcore/go.sum index f623b1e..79f1ff2 100644 --- a/libcore/go.sum +++ b/libcore/go.sum @@ -11,8 +11,6 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cloudflare/circl v1.3.6 h1:/xbKIqSHbZXHwkhbrhrt2YOHIwYJlXH94E3tI/gDlUg= github.com/cloudflare/circl v1.3.6/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= -github.com/codeclysm/extract v2.2.0+incompatible h1:q3wyckoA30bhUSiwdQezMqVhwd8+WGE64/GL//LtUhI= -github.com/codeclysm/extract v2.2.0+incompatible/go.mod h1:2nhFMPHiU9At61hz+12bfrlpXSUrOnK+wR+KlGO4Uks= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cretz/bine v0.1.0/go.mod h1:6PF6fWAvYtwjRGkAuDEJeWNOv3a2hUouSP/yRYXmvHw= github.com/cretz/bine v0.2.0 h1:8GiDRGlTgz+o8H9DSnsl+5MeBK4HsExxgl6WgzOCuZo= @@ -46,8 +44,6 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= -github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -58,15 +54,11 @@ github.com/insomniacslk/dhcp v0.0.0-20231016090811-6a2c8fbdcc1c/go.mod h1:3A9PQ1 github.com/josharian/native v1.0.1-0.20221213033349-c1e37c09b531/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA= github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= -github.com/juju/errors v1.0.0 h1:yiq7kjCLll1BiaRuNY53MGI0+EQ3rF6GB+wvboZDefM= -github.com/juju/errors v1.0.0/go.mod h1:B5x9thDqx0wIMH3+aLIMP9HjItInYWObRovoCFM5Qe8= github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/libdns/alidns v1.0.3 h1:LFHuGnbseq5+HCeGa1aW8awyX/4M2psB9962fdD2+yQ= github.com/libdns/alidns v1.0.3/go.mod h1:e18uAG6GanfRhcJj6/tps2rCMzQJaYVcGKT+ELjdjGE= github.com/libdns/cloudflare v0.1.0 h1:93WkJaGaiXCe353LHEP36kAWCUw0YjFqwhkBkU2/iic= @@ -217,7 +209,6 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/libcore/io.go b/libcore/io.go index 33754e8..e4c1d39 100644 --- a/libcore/io.go +++ b/libcore/io.go @@ -1,12 +1,14 @@ package libcore import ( - "context" + "archive/zip" "io" "os" + "path/filepath" - "github.com/codeclysm/extract" "github.com/ulikunitz/xz" + "github.com/sagernet/sing/common" + E "github.com/sagernet/sing/common/exceptions" ) func Unxz(archive string, path string) error { @@ -30,11 +32,47 @@ func Unxz(archive string, path string) error { } func Unzip(archive string, path string) error { - i, err := os.Open(archive) + r, err := zip.OpenReader(archive) if err != nil { return err } - defer i.Close() - err = extract.Zip(context.Background(), i, path, nil) - return err + defer r.Close() + + err = os.MkdirAll(path, os.ModePerm) + if err != nil { + return err + } + + for _, file := range r.File { + filePath := filepath.Join(path, file.Name) + + if file.FileInfo().IsDir() { + err = os.MkdirAll(filePath, os.ModePerm) + if err != nil { + return err + } + continue + } + + newFile, err := os.Create(filePath) + if err != nil { + return err + } + + zipFile, err := file.Open() + if err != nil { + newFile.Close() + return err + } + + var errs error + _, err = io.Copy(newFile, zipFile) + errs = E.Errors(errs, err) + errs = E.Errors(errs, common.Close(zipFile, newFile)) + if errs != nil { + return errs + } + } + + return nil }