diff --git a/filemdl/filemdl.go b/filemdl/filemdl.go index 5d3608d4a009cf057a8cbafbb882185c9490ac44..d0d160581604badbb4506bc459479bcc4eb9f778 100644 --- a/filemdl/filemdl.go +++ b/filemdl/filemdl.go @@ -2,7 +2,6 @@ package filemdl import ( "errors" - "fmt" "io" "io/ioutil" "os" @@ -649,17 +648,18 @@ func writeFileSafely(filePath string, data []byte, perm os.FileMode) error { } tmpFileName := tmpFile.Name() - // get the file mode from the original file and use that for the replacement - // file, too. info, err := os.Stat(filePath) - if os.IsNotExist(err) { - } else if err != nil { + if err != nil && !os.IsNotExist(err) { return err - } else { + } + // get the file mode from the original file and use that for the replacement + // file, too. + if err == nil { if err := os.Chmod(tmpFileName, info.Mode()); err != nil { - return fmt.Errorf("can't set filemode on tempfile %q: %v", tmpFileName, err) + return errormdl.Wrap("can't set filemode on tempfile: " + tmpFileName + ", error: " + err.Error()) } } + if err := AtomicReplaceFile(tmpFileName, filePath); err != nil { return errormdl.Wrap("cannot replace " + filePath + " with " + tmpFileName) } @@ -671,6 +671,7 @@ func writeFile(filename string, data []byte, perm os.FileMode) error { if err != nil { return err } + defer f.Close() n, err := f.Write(data) if err != nil { return err @@ -678,10 +679,5 @@ func writeFile(filename string, data []byte, perm os.FileMode) error { if n < len(data) { return errormdl.Wrap("short write") } - err = f.Sync() - if err != nil { - return err - } - - return f.Close() + return f.Sync() } diff --git a/filemdl/filemdl_linux.go b/filemdl/filemdl_linux.go index c5a5e2b2c0b9d616755f291c03bac09a44a3641b..acd187767d9c8ebcafabb998afd29d37eca8e74f 100644 --- a/filemdl/filemdl_linux.go +++ b/filemdl/filemdl_linux.go @@ -1,3 +1,4 @@ +// TODO: Build flag needs to be passed while building exe/executable // +build !windows package filemdl diff --git a/filemdl/filemdl_windows.go b/filemdl/filemdl_windows.go index ba259bbc853961483ba646579b0ac22ad9eb0204..7708f9933c99d836d11dcb25217d50768749564d 100644 --- a/filemdl/filemdl_windows.go +++ b/filemdl/filemdl_windows.go @@ -7,14 +7,10 @@ import ( ) const ( - movefile_replace_existing = 0x1 - movefile_write_through = 0x8 - modkernel32 = syscall.NewLazyDLL("kernel32.dll") - - procMoveFileExW = modkernel32.NewProc("MoveFileExW") - modkernel32 = syscall.NewLazyDLL("kernel32.dll") - - procMoveFileExW = modkernel32.NewProc("MoveFileExW") + moveFileReplacExisting = 0x1 + moveFileWriteThrough = 0x8 + modkernel32 = syscall.NewLazyDLL("kernel32.dll") + procMoveFileExW = modkernel32.NewProc("MoveFileExW") ) //sys moveFileEx(lpExistingFileName *uint16, lpNewFileName *uint16, dwFlags uint32) (err error) = MoveFileExW @@ -33,7 +29,7 @@ func AtomicReplaceFile(source, destination string) error { } // see http://msdn.microsoft.com/en-us/library/windows/desktop/aa365240(v=vs.85).aspx - if err := moveFileEx(src, dest, movefile_replace_existing|movefile_write_through); err != nil { + if err := moveFileEx(src, dest, moveFileReplacExisting|moveFileWriteThrough); err != nil { return &os.LinkError{"replace", source, destination, err} } return nil diff --git a/filemdl/filepack/filePack.go b/filemdl/filepack/filePack.go index d477876a3c67ce9a8fdf83b799182573a1672690..835cdb309499c3062ff8bf831ffcd1a16fc60524 100644 --- a/filemdl/filepack/filePack.go +++ b/filemdl/filepack/filePack.go @@ -16,7 +16,7 @@ import ( "corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/filemdl" "corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/hashmdl" - //"corelab.mkcl.org\MKCLOS\coredevelopmentplatform\corepkgv2\securitymdl\securitymdl.go" + "github.com/tidwall/gjson" "github.com/tidwall/sjson" diff --git a/filemdl/filepack/filepack_test.go b/filemdl/filepack/filepack_test.go index 33bf70a25e9498bdb7333d1229ce473a72237012..ba637e82b635585fc91c81056812f8c132ce31d9 100644 --- a/filemdl/filepack/filepack_test.go +++ b/filemdl/filepack/filepack_test.go @@ -88,7 +88,7 @@ func BenchmarkGetFileDataFromPack(b *testing.B) { } func TestFastWriteFile(t *testing.T) { - err := filemdl.FastWriteFile("/home/vivekn/pqr", []byte("how are you"), false, false, true) + err := filemdl.FastWriteFile("C:/Users/shridharp/Desktop/Test/testF.txt", []byte("how are you"), true, true) if err != nil { log.Fatal(err) }