feat: tested
This commit is contained in:
@@ -6,7 +6,6 @@ import (
|
|||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
"math"
|
"math"
|
||||||
@@ -114,6 +113,20 @@ func NewEncFile(name string, file *os.File, encFs *EncFs, isCreate bool) (*EncFi
|
|||||||
}
|
}
|
||||||
isDir := fileInfo.IsDir()
|
isDir := fileInfo.IsDir()
|
||||||
var encFileMeta *EncFileMeta = nil
|
var encFileMeta *EncFileMeta = nil
|
||||||
|
|
||||||
|
fileState, err := os.Stat(name)
|
||||||
|
if err != nil {
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
isCreate = true
|
||||||
|
} else {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if !fileState.IsDir() && fileState.Size() == 0 {
|
||||||
|
isCreate = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if !isDir {
|
if !isDir {
|
||||||
if isCreate {
|
if isCreate {
|
||||||
encFileMeta, err = openOrNewEncFileMeta(name)
|
encFileMeta, err = openOrNewEncFileMeta(name)
|
||||||
@@ -193,14 +206,9 @@ func (f *EncFile) Seek(offset int64, whence int) (int64, error) {
|
|||||||
return 0, checkIsFileErr
|
return 0, checkIsFileErr
|
||||||
}
|
}
|
||||||
|
|
||||||
// I do not understand whence
|
|
||||||
if whence != 0 {
|
|
||||||
return 0, fmt.Errorf("not supported whence: %d", whence)
|
|
||||||
}
|
|
||||||
|
|
||||||
ret, err := f.file.Seek(offset, whence)
|
ret, err := f.file.Seek(offset, whence)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
f.filePos = offset
|
f.filePos = ret
|
||||||
}
|
}
|
||||||
return ret, err
|
return ret, err
|
||||||
}
|
}
|
||||||
|
|||||||
12
encfs/fs.go
12
encfs/fs.go
@@ -56,28 +56,30 @@ func (encFs *EncFs) Open(name string) (afero.File, error) {
|
|||||||
return convertOsFileToEncFile(name, f, e, encFs, false)
|
return convertOsFileToEncFile(name, f, e, encFs, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*EncFs) OpenFile(name string, flag int, perm os.FileMode) (afero.File, error) {
|
func (encFs *EncFs) OpenFile(name string, flag int, perm os.FileMode) (afero.File, error) {
|
||||||
f, e := os.OpenFile(name, flag, perm)
|
f, e := os.OpenFile(name, flag, perm)
|
||||||
if f == nil {
|
if f == nil {
|
||||||
// while this looks strange, we need to return a bare nil (of type nil) not
|
// while this looks strange, we need to return a bare nil (of type nil) not
|
||||||
// a nil value of type *os.File or nil won't be nil
|
// a nil value of type *os.File or nil won't be nil
|
||||||
return nil, e
|
return nil, e
|
||||||
}
|
}
|
||||||
return f, e
|
return convertOsFileToEncFile(name, f, e, encFs, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*EncFs) Remove(name string) error {
|
func (*EncFs) Remove(name string) error {
|
||||||
// TODO remove enc file meta
|
encFileMetaName := name + EncFileExt
|
||||||
|
_ = os.Remove(encFileMetaName)
|
||||||
return os.Remove(name)
|
return os.Remove(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*EncFs) RemoveAll(path string) error {
|
func (*EncFs) RemoveAll(path string) error {
|
||||||
// TODO remove enc file meta
|
|
||||||
return os.RemoveAll(path)
|
return os.RemoveAll(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*EncFs) Rename(oldname, newname string) error {
|
func (*EncFs) Rename(oldname, newname string) error {
|
||||||
// TODO rename enc file meta
|
oldEncFileMetaName := oldname + EncFileExt
|
||||||
|
newEncFileMetaName := newname + EncFileExt
|
||||||
|
_ = os.Rename(oldEncFileMetaName, newEncFileMetaName)
|
||||||
return os.Rename(oldname, newname)
|
return os.Rename(oldname, newname)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
33
main.go
33
main.go
@@ -10,38 +10,9 @@ import (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
key := []byte{
|
key := []byte{
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
}
|
}
|
||||||
fmt.Println(hex.EncodeToString(key))
|
|
||||||
|
|
||||||
encFs := encfs.NewEncFs(key)
|
encFs := encfs.NewEncFs(key)
|
||||||
encFs2 := encfs.NewEncFs(nil)
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
encFile1, err := encFs2.Create("test1")
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
encFile1.Write([]byte("hello world"))
|
|
||||||
encFile1.Write([]byte("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"))
|
|
||||||
encFile1.WriteAt([]byte("TEST"), 10)
|
|
||||||
encFile1.Write([]byte("------"))
|
|
||||||
encFile1.Close()
|
|
||||||
|
|
||||||
encFile2, err := encFs2.Create("test2")
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
encFile2.Write([]byte("hello world"))
|
|
||||||
seekI, err := encFile2.Seek(2, 0)
|
|
||||||
fmt.Println(seekI, ", ", err)
|
|
||||||
encFile2.Write([]byte("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"))
|
|
||||||
encFile2.Write([]byte("------"))
|
|
||||||
encFile2.Close()
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
func() {
|
func() {
|
||||||
encFile, err := encFs.Create("test")
|
encFile, err := encFs.Create("test")
|
||||||
@@ -80,4 +51,6 @@ func main() {
|
|||||||
fmt.Println(readLen, err)
|
fmt.Println(readLen, err)
|
||||||
fmt.Println(string(buff))
|
fmt.Println(string(buff))
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
encFs.Remove("test")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user