diff options
author | Ondřej Surý <ondrej@sury.org> | 2011-04-20 15:44:41 +0200 |
---|---|---|
committer | Ondřej Surý <ondrej@sury.org> | 2011-04-20 15:44:41 +0200 |
commit | 50104cc32a498f7517a51c8dc93106c51c7a54b4 (patch) | |
tree | 47af80be259cc7c45d0eaec7d42e61fa38c8e4fb /src/pkg/syscall | |
parent | c072558b90f1bbedc2022b0f30c8b1ac4712538e (diff) | |
download | golang-50104cc32a498f7517a51c8dc93106c51c7a54b4.tar.gz |
Imported Upstream version 2011.03.07.1upstream/2011.03.07.1
Diffstat (limited to 'src/pkg/syscall')
-rw-r--r-- | src/pkg/syscall/exec_unix.go | 4 | ||||
-rw-r--r-- | src/pkg/syscall/exec_windows.go | 2 | ||||
-rwxr-xr-x | src/pkg/syscall/mkerrors.sh | 2 | ||||
-rw-r--r-- | src/pkg/syscall/syscall_windows.go | 63 | ||||
-rw-r--r-- | src/pkg/syscall/zerrors_freebsd_amd64.go | 1 | ||||
-rw-r--r-- | src/pkg/syscall/zerrors_linux_386.go | 2 | ||||
-rw-r--r-- | src/pkg/syscall/zerrors_linux_amd64.go | 2 | ||||
-rw-r--r-- | src/pkg/syscall/zsyscall_windows_386.go | 15 | ||||
-rw-r--r-- | src/pkg/syscall/zsysnum_freebsd_amd64.go | 2 | ||||
-rw-r--r-- | src/pkg/syscall/ztypes_windows_386.go | 2 |
10 files changed, 64 insertions, 31 deletions
diff --git a/src/pkg/syscall/exec_unix.go b/src/pkg/syscall/exec_unix.go index 04c066918..2e09539ee 100644 --- a/src/pkg/syscall/exec_unix.go +++ b/src/pkg/syscall/exec_unix.go @@ -238,6 +238,10 @@ func forkExec(argv0 string, argv []string, envv []string, traceme bool, dir stri dirp = StringBytePtr(dir) } + if OS == "freebsd" && len(argv[0]) > len(argv0) { + argvp[0] = argv0p + } + // Acquire the fork lock so that no other threads // create new fds that are not yet close-on-exec // before we fork. diff --git a/src/pkg/syscall/exec_windows.go b/src/pkg/syscall/exec_windows.go index 7256c3ae3..73c3c8624 100644 --- a/src/pkg/syscall/exec_windows.go +++ b/src/pkg/syscall/exec_windows.go @@ -185,7 +185,7 @@ func StartProcess(argv0 string, argv []string, envv []string, dir string, fd []i startupInfo, processInfo) - if err != 0 { + if err == 0 { pid = int(processInfo.ProcessId) handle = int(processInfo.Process) CloseHandle(processInfo.Thread) diff --git a/src/pkg/syscall/mkerrors.sh b/src/pkg/syscall/mkerrors.sh index a13c0e91b..d40d1f6b3 100755 --- a/src/pkg/syscall/mkerrors.sh +++ b/src/pkg/syscall/mkerrors.sh @@ -116,7 +116,7 @@ done $2 ~ /^E[A-Z0-9_]+$/ || $2 ~ /^SIG[^_]/ || $2 ~ /^IN_/ || - $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|EVFILT|EV|SHUT|PROT|MAP|PACKET|MSG|SCM|IFF|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ || + $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|EVFILT|EV|SHUT|PROT|MAP|PACKET|MSG|SCM|IFF|NET_RT|RTM|RTF|RTV|RTA|RTAX|MCL)_/ || $2 == "SOMAXCONN" || $2 == "NAME_MAX" || $2 == "IFNAMSIZ" || diff --git a/src/pkg/syscall/syscall_windows.go b/src/pkg/syscall/syscall_windows.go index 0cd89d426..394e06442 100644 --- a/src/pkg/syscall/syscall_windows.go +++ b/src/pkg/syscall/syscall_windows.go @@ -154,6 +154,7 @@ func NewCallback(fn interface{}) uintptr //sys SetEnvironmentVariable(name *uint16, value *uint16) (errno int) = kernel32.SetEnvironmentVariableW //sys SetFileTime(handle int32, ctime *Filetime, atime *Filetime, wtime *Filetime) (errno int) //sys GetFileAttributes(name *uint16) (attrs uint32, errno int) [failretval==INVALID_FILE_ATTRIBUTES] = kernel32.GetFileAttributesW +//sys SetFileAttributes(name *uint16, attrs uint32) (errno int) = kernel32.SetFileAttributesW //sys GetCommandLine() (cmd *uint16) = kernel32.GetCommandLineW //sys CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, errno int) [failretval==nil] = shell32.CommandLineToArgvW //sys LocalFree(hmem uint32) (handle uint32, errno int) [failretval!=0] @@ -470,6 +471,23 @@ func Fsync(fd int) (errno int) { return FlushFileBuffers(int32(fd)) } +func Chmod(path string, mode uint32) (errno int) { + if mode == 0 { + return EINVAL + } + p := StringToUTF16Ptr(path) + attrs, e := GetFileAttributes(p) + if e != 0 { + return e + } + if mode&S_IWRITE != 0 { + attrs &^= FILE_ATTRIBUTE_READONLY + } else { + attrs |= FILE_ATTRIBUTE_READONLY + } + return SetFileAttributes(p, attrs) +} + // net api calls //sys WSAStartup(verreq uint32, data *WSAData) (sockerrno int) = wsock32.WSAStartup @@ -635,26 +653,6 @@ func Shutdown(fd, how int) (errno int) { return int(shutdown(int32(fd), int32(how))) } -func AcceptIOCP(iocpfd, fd int, o *Overlapped) (attrs *byte, errno int) { - // Will ask for local and remote address only. - rsa := make([]RawSockaddrAny, 2) - attrs = (*byte)(unsafe.Pointer(&rsa[0])) - alen := uint32(unsafe.Sizeof(rsa[0])) - var done uint32 - errno = AcceptEx(uint32(iocpfd), uint32(fd), attrs, 0, alen, alen, &done, o) - return -} - -func GetAcceptIOCPSockaddrs(attrs *byte) (lsa, rsa Sockaddr) { - var lrsa, rrsa *RawSockaddrAny - var llen, rlen int32 - alen := uint32(unsafe.Sizeof(*lrsa)) - GetAcceptExSockaddrs(attrs, 0, alen, alen, &lrsa, &llen, &rrsa, &rlen) - lsa, _ = lrsa.Sockaddr() - rsa, _ = rrsa.Sockaddr() - return -} - func WSASendto(s uint32, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to Sockaddr, overlapped *Overlapped, croutine *byte) (errno int) { rsa, l, err := to.sockaddr() if err != 0 { @@ -702,8 +700,19 @@ type Linger struct { Linger int32 } -func SetsockoptLinger(fd, level, opt int, l *Linger) (errno int) { return EWINDOWS } -func BindToDevice(fd int, device string) (errno int) { return EWINDOWS } +const ( + IP_ADD_MEMBERSHIP = iota + IP_DROP_MEMBERSHIP +) + +type IpMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +func SetsockoptLinger(fd, level, opt int, l *Linger) (errno int) { return EWINDOWS } +func SetsockoptIpMreq(fd, level, opt int, mreq *IpMreq) (errno int) { return EWINDOWS } +func BindToDevice(fd int, device string) (errno int) { return EWINDOWS } // TODO(brainman): fix all needed for os @@ -718,11 +727,11 @@ func Fchdir(fd int) (errno int) { return EWINDOWS } func Link(oldpath, newpath string) (errno int) { return EWINDOWS } func Symlink(path, link string) (errno int) { return EWINDOWS } func Readlink(path string, buf []byte) (n int, errno int) { return 0, EWINDOWS } -func Chmod(path string, mode uint32) (errno int) { return EWINDOWS } -func Fchmod(fd int, mode uint32) (errno int) { return EWINDOWS } -func Chown(path string, uid int, gid int) (errno int) { return EWINDOWS } -func Lchown(path string, uid int, gid int) (errno int) { return EWINDOWS } -func Fchown(fd int, uid int, gid int) (errno int) { return EWINDOWS } + +func Fchmod(fd int, mode uint32) (errno int) { return EWINDOWS } +func Chown(path string, uid int, gid int) (errno int) { return EWINDOWS } +func Lchown(path string, uid int, gid int) (errno int) { return EWINDOWS } +func Fchown(fd int, uid int, gid int) (errno int) { return EWINDOWS } func Getuid() (uid int) { return -1 } func Geteuid() (euid int) { return -1 } diff --git a/src/pkg/syscall/zerrors_freebsd_amd64.go b/src/pkg/syscall/zerrors_freebsd_amd64.go index ce3ff5402..770d293a2 100644 --- a/src/pkg/syscall/zerrors_freebsd_amd64.go +++ b/src/pkg/syscall/zerrors_freebsd_amd64.go @@ -698,7 +698,6 @@ const ( SIOCGIFBRDADDR = 0xc0206923 SIOCGIFCAP = 0xc020691f SIOCGIFCONF = 0xc0106924 - SIOCGIFCONF32 = 0xc0086924 SIOCGIFDESCR = 0xc020692a SIOCGIFDSTADDR = 0xc0206922 SIOCGIFFLAGS = 0xc0206911 diff --git a/src/pkg/syscall/zerrors_linux_386.go b/src/pkg/syscall/zerrors_linux_386.go index 43d27827c..a73a94961 100644 --- a/src/pkg/syscall/zerrors_linux_386.go +++ b/src/pkg/syscall/zerrors_linux_386.go @@ -424,6 +424,8 @@ const ( MAP_SHARED = 0x1 MAP_STACK = 0x20000 MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 MSG_CMSG_CLOEXEC = 0x40000000 MSG_CONFIRM = 0x800 MSG_CTRUNC = 0x8 diff --git a/src/pkg/syscall/zerrors_linux_amd64.go b/src/pkg/syscall/zerrors_linux_amd64.go index 04f4dad2c..eea55a275 100644 --- a/src/pkg/syscall/zerrors_linux_amd64.go +++ b/src/pkg/syscall/zerrors_linux_amd64.go @@ -424,6 +424,8 @@ const ( MAP_SHARED = 0x1 MAP_STACK = 0x20000 MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 MSG_CMSG_CLOEXEC = 0x40000000 MSG_CONFIRM = 0x800 MSG_CTRUNC = 0x8 diff --git a/src/pkg/syscall/zsyscall_windows_386.go b/src/pkg/syscall/zsyscall_windows_386.go index 46e16f43c..543992ea6 100644 --- a/src/pkg/syscall/zsyscall_windows_386.go +++ b/src/pkg/syscall/zsyscall_windows_386.go @@ -63,6 +63,7 @@ var ( procSetEnvironmentVariableW = getSysProcAddr(modkernel32, "SetEnvironmentVariableW") procSetFileTime = getSysProcAddr(modkernel32, "SetFileTime") procGetFileAttributesW = getSysProcAddr(modkernel32, "GetFileAttributesW") + procSetFileAttributesW = getSysProcAddr(modkernel32, "SetFileAttributesW") procGetCommandLineW = getSysProcAddr(modkernel32, "GetCommandLineW") procCommandLineToArgvW = getSysProcAddr(modshell32, "CommandLineToArgvW") procLocalFree = getSysProcAddr(modkernel32, "LocalFree") @@ -806,6 +807,20 @@ func GetFileAttributes(name *uint16) (attrs uint32, errno int) { return } +func SetFileAttributes(name *uint16, attrs uint32) (errno int) { + r1, _, e1 := Syscall(procSetFileAttributesW, 2, uintptr(unsafe.Pointer(name)), uintptr(attrs), 0) + if int(r1) == 0 { + if e1 != 0 { + errno = int(e1) + } else { + errno = EINVAL + } + } else { + errno = 0 + } + return +} + func GetCommandLine() (cmd *uint16) { r0, _, _ := Syscall(procGetCommandLineW, 0, 0, 0, 0) cmd = (*uint16)(unsafe.Pointer(r0)) diff --git a/src/pkg/syscall/zsysnum_freebsd_amd64.go b/src/pkg/syscall/zsysnum_freebsd_amd64.go index 4286b487d..a5b7b664f 100644 --- a/src/pkg/syscall/zsysnum_freebsd_amd64.go +++ b/src/pkg/syscall/zsysnum_freebsd_amd64.go @@ -1,4 +1,4 @@ -// mksysnum_freebsd.sh +// mksysnum_freebsd.sh // MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT package syscall diff --git a/src/pkg/syscall/ztypes_windows_386.go b/src/pkg/syscall/ztypes_windows_386.go index e9ab35461..ff367a858 100644 --- a/src/pkg/syscall/ztypes_windows_386.go +++ b/src/pkg/syscall/ztypes_windows_386.go @@ -28,6 +28,7 @@ const ( ERROR_PROC_NOT_FOUND = 127 ERROR_ENVVAR_NOT_FOUND = 203 ERROR_DIRECTORY = 267 + ERROR_OPERATION_ABORTED = 995 ERROR_IO_PENDING = 997 ) @@ -380,6 +381,7 @@ const ( S_ISGID = 0x400 S_ISVTX = 0x200 S_IRUSR = 0x100 + S_IWRITE = 0x80 S_IWUSR = 0x80 S_IXUSR = 0x40 ) |