mirror of https://github.com/ethereum/go-ethereum
parent
536b3b416c
commit
9eba3a9fff
@ -1,51 +0,0 @@ |
||||
// Copyright (c) 2012, Suryandaru Triandana <syndtr@gmail.com>
|
||||
// All rights reserved.
|
||||
//
|
||||
// Use of this source code is governed by a BSD-style license.
|
||||
//
|
||||
// +build darwin dragonfly freebsd linux netbsd openbsd solaris
|
||||
|
||||
package main |
||||
|
||||
import ( |
||||
"os" |
||||
"syscall" |
||||
) |
||||
|
||||
func rename(oldpath, newpath string) error { |
||||
return os.Rename(oldpath, newpath) |
||||
} |
||||
|
||||
func isErrInvalid(err error) bool { |
||||
if err == os.ErrInvalid { |
||||
return true |
||||
} |
||||
// Go < 1.8
|
||||
if syserr, ok := err.(*os.SyscallError); ok && syserr.Err == syscall.EINVAL { |
||||
return true |
||||
} |
||||
// Go >= 1.8 returns *os.PathError instead
|
||||
if patherr, ok := err.(*os.PathError); ok && patherr.Err == syscall.EINVAL { |
||||
return true |
||||
} |
||||
return false |
||||
} |
||||
|
||||
func syncDir(name string) error { |
||||
// As per fsync manpage, Linux seems to expect fsync on directory, however
|
||||
// some system don't support this, so we will ignore syscall.EINVAL.
|
||||
//
|
||||
// From fsync(2):
|
||||
// Calling fsync() does not necessarily ensure that the entry in the
|
||||
// directory containing the file has also reached disk. For that an
|
||||
// explicit fsync() on a file descriptor for the directory is also needed.
|
||||
f, err := os.Open(name) |
||||
if err != nil { |
||||
return err |
||||
} |
||||
defer f.Close() |
||||
if err := f.Sync(); err != nil && !isErrInvalid(err) { |
||||
return err |
||||
} |
||||
return nil |
||||
} |
@ -1,43 +0,0 @@ |
||||
// Copyright (c) 2013, Suryandaru Triandana <syndtr@gmail.com>
|
||||
// All rights reserved.
|
||||
//
|
||||
// Use of this source code is governed by a BSD-style license.
|
||||
|
||||
package main |
||||
|
||||
import ( |
||||
"syscall" |
||||
"unsafe" |
||||
) |
||||
|
||||
var ( |
||||
modkernel32 = syscall.NewLazyDLL("kernel32.dll") |
||||
procMoveFileExW = modkernel32.NewProc("MoveFileExW") |
||||
) |
||||
|
||||
const _MOVEFILE_REPLACE_EXISTING = 1 |
||||
|
||||
func moveFileEx(from *uint16, to *uint16, flags uint32) error { |
||||
r1, _, e1 := syscall.Syscall(procMoveFileExW.Addr(), 3, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags)) |
||||
if r1 == 0 { |
||||
if e1 != 0 { |
||||
return error(e1) |
||||
} |
||||
return syscall.EINVAL |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func rename(oldpath, newpath string) error { |
||||
from, err := syscall.UTF16PtrFromString(oldpath) |
||||
if err != nil { |
||||
return err |
||||
} |
||||
to, err := syscall.UTF16PtrFromString(newpath) |
||||
if err != nil { |
||||
return err |
||||
} |
||||
return moveFileEx(from, to, _MOVEFILE_REPLACE_EXISTING) |
||||
} |
||||
|
||||
func syncDir(name string) error { return nil } |
Loading…
Reference in new issue