diff options
author | 2021-09-12 10:10:24 +0100 | |
---|---|---|
committer | 2021-09-12 10:10:24 +0100 | |
commit | f6492d12d948507021bbe934de94e87e20464c01 (patch) | |
tree | 6705d6ef6f3c4d70f3b3ebc77c2960d8e508cf37 /vendor/git.iim.gay/grufwub/go-store/storage/fs.go | |
parent | Merge pull request #213 from superseriousbusiness/alpine+node_upstep (diff) | |
parent | fix keys used to access storage items (diff) | |
download | gotosocial-f6492d12d948507021bbe934de94e87e20464c01.tar.xz |
Merge pull request #214 from NyaaaWhatsUpDoc/improvement/update-storage-library
add git.iim.gay/grufwub/go-store for storage backend, replacing blob.Storage
Diffstat (limited to 'vendor/git.iim.gay/grufwub/go-store/storage/fs.go')
-rw-r--r-- | vendor/git.iim.gay/grufwub/go-store/storage/fs.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/vendor/git.iim.gay/grufwub/go-store/storage/fs.go b/vendor/git.iim.gay/grufwub/go-store/storage/fs.go new file mode 100644 index 000000000..2d6c44caf --- /dev/null +++ b/vendor/git.iim.gay/grufwub/go-store/storage/fs.go @@ -0,0 +1,48 @@ +package storage + +import ( + "os" + "syscall" + + "git.iim.gay/grufwub/go-store/util" +) + +const ( + defaultDirPerms = 0755 + defaultFilePerms = 0644 + defaultFileROFlags = syscall.O_RDONLY + defaultFileRWFlags = syscall.O_CREAT | syscall.O_RDWR + defaultFileLockFlags = syscall.O_RDONLY | syscall.O_EXCL | syscall.O_CREAT +) + +// NOTE: +// These functions are for opening storage files, +// not necessarily for e.g. initial setup (OpenFile) + +// open should not be called directly +func open(path string, flags int) (*os.File, error) { + var fd int + err := util.RetryOnEINTR(func() (err error) { + fd, err = syscall.Open(path, flags, defaultFilePerms) + return + }) + if err != nil { + return nil, err + } + return os.NewFile(uintptr(fd), path), nil +} + +// stat checks for a file on disk +func stat(path string) (bool, error) { + var stat syscall.Stat_t + err := util.RetryOnEINTR(func() error { + return syscall.Stat(path, &stat) + }) + if err != nil { + if err == syscall.ENOENT { + err = nil + } + return false, err + } + return true, nil +} |