diff options
author | ale <ale@incal.net> | 2017-12-18 22:35:16 +0000 |
---|---|---|
committer | ale <ale@incal.net> | 2017-12-18 22:35:16 +0000 |
commit | 445bf898d2015d1e28e5f01ef07b26be9dd42bf1 (patch) | |
tree | 05bae03d8625be5dee79ac408cf96b6ffae97840 /vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_plan9.go | |
parent | 394de2d98a9cfde6244620f0b188625b60f68f96 (diff) | |
download | crawl-445bf898d2015d1e28e5f01ef07b26be9dd42bf1.tar.gz crawl-445bf898d2015d1e28e5f01ef07b26be9dd42bf1.zip |
Add vendor deps
Diffstat (limited to 'vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_plan9.go')
-rw-r--r-- | vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_plan9.go | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_plan9.go b/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_plan9.go new file mode 100644 index 0000000..bab62bf --- /dev/null +++ b/vendor/github.com/syndtr/goleveldb/leveldb/storage/file_storage_plan9.go @@ -0,0 +1,65 @@ +// Copyright (c) 2012, Suryandaru Triandana <syndtr@gmail.com> +// All rights reserved. +// +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package storage + +import ( + "os" + "path/filepath" +) + +type plan9FileLock struct { + f *os.File +} + +func (fl *plan9FileLock) release() error { + return fl.f.Close() +} + +func newFileLock(path string, readOnly bool) (fl fileLock, err error) { + var ( + flag int + perm os.FileMode + ) + if readOnly { + flag = os.O_RDONLY + } else { + flag = os.O_RDWR + perm = os.ModeExclusive + } + f, err := os.OpenFile(path, flag, perm) + if os.IsNotExist(err) { + f, err = os.OpenFile(path, flag|os.O_CREATE, perm|0644) + } + if err != nil { + return + } + fl = &plan9FileLock{f: f} + return +} + +func rename(oldpath, newpath string) error { + if _, err := os.Stat(newpath); err == nil { + if err := os.Remove(newpath); err != nil { + return err + } + } + + _, fname := filepath.Split(newpath) + return os.Rename(oldpath, fname) +} + +func syncDir(name string) error { + f, err := os.Open(name) + if err != nil { + return err + } + defer f.Close() + if err := f.Sync(); err != nil { + return err + } + return nil +} |