mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2024-11-16 19:56:51 +08:00
Improve: safe write provider file
This commit is contained in:
parent
98614a1f3f
commit
8f32e6a60f
|
@ -5,6 +5,7 @@ import (
|
|||
"crypto/md5"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/Dreamacro/clash/log"
|
||||
|
@ -12,6 +13,7 @@ import (
|
|||
|
||||
var (
|
||||
fileMode os.FileMode = 0666
|
||||
dirMode os.FileMode = 0755
|
||||
)
|
||||
|
||||
type parser = func([]byte) (interface{}, error)
|
||||
|
@ -71,7 +73,7 @@ func (f *fetcher) Initial() (interface{}, error) {
|
|||
}
|
||||
}
|
||||
|
||||
if err := ioutil.WriteFile(f.vehicle.Path(), buf, fileMode); err != nil {
|
||||
if err := safeWrite(f.vehicle.Path(), buf); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
@ -103,7 +105,7 @@ func (f *fetcher) Update() (interface{}, bool, error) {
|
|||
return nil, false, err
|
||||
}
|
||||
|
||||
if err := ioutil.WriteFile(f.vehicle.Path(), buf, fileMode); err != nil {
|
||||
if err := safeWrite(f.vehicle.Path(), buf); err != nil {
|
||||
return nil, false, err
|
||||
}
|
||||
|
||||
|
@ -140,6 +142,18 @@ func (f *fetcher) pullLoop() {
|
|||
}
|
||||
}
|
||||
|
||||
func safeWrite(path string, buf []byte) error {
|
||||
dir := filepath.Dir(path)
|
||||
|
||||
if _, err := os.Stat(dir); os.IsNotExist(err) {
|
||||
if err := os.MkdirAll(dir, dirMode); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return ioutil.WriteFile(path, buf, fileMode)
|
||||
}
|
||||
|
||||
func newFetcher(name string, interval time.Duration, vehicle Vehicle, parser parser, onUpdate func(interface{})) *fetcher {
|
||||
var ticker *time.Ticker
|
||||
if interval != 0 {
|
||||
|
|
Loading…
Reference in New Issue
Block a user