77
81
func Syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
78
82
func Syscall9(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2, err uintptr)
79
83
func Syscall12(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 uintptr) (r1, r2, err uintptr)
80
func loadlibraryex(filename uintptr) (handle uint32)
81
func getprocaddress(handle uint32, procname uintptr) (proc uintptr)
84
func loadlibraryex(filename uintptr) (handle uintptr)
85
func getprocaddress(handle uintptr, procname uintptr) (proc uintptr)
83
func loadDll(fname string) uint32 {
87
func loadDll(fname string) uintptr {
84
88
m := loadlibraryex(uintptr(unsafe.Pointer(StringBytePtr(fname))))
86
90
panic("syscall: could not LoadLibraryEx " + fname)
110
116
// windows api calls
112
118
//sys GetLastError() (lasterrno int)
113
//sys LoadLibrary(libname string) (handle uint32, errno int) = LoadLibraryW
114
//sys FreeLibrary(handle uint32) (errno int)
115
//sys GetProcAddress(module uint32, procname string) (proc uint32, errno int)
119
//sys LoadLibrary(libname string) (handle Handle, errno int) = LoadLibraryW
120
//sys FreeLibrary(handle Handle) (errno int)
121
//sys GetProcAddress(module Handle, procname string) (proc Handle, errno int)
116
122
//sys GetVersion() (ver uint32, errno int)
117
123
//sys FormatMessage(flags uint32, msgsrc uint32, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, errno int) = FormatMessageW
118
124
//sys ExitProcess(exitcode uint32)
119
//sys CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile int32) (handle int32, errno int) [failretval==-1] = CreateFileW
120
//sys ReadFile(handle int32, buf []byte, done *uint32, overlapped *Overlapped) (errno int)
121
//sys WriteFile(handle int32, buf []byte, done *uint32, overlapped *Overlapped) (errno int)
122
//sys SetFilePointer(handle int32, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, errno int) [failretval==0xffffffff]
123
//sys CloseHandle(handle int32) (errno int)
124
//sys GetStdHandle(stdhandle int32) (handle int32, errno int) [failretval==-1]
125
//sys FindFirstFile(name *uint16, data *Win32finddata) (handle int32, errno int) [failretval==-1] = FindFirstFileW
126
//sys FindNextFile(handle int32, data *Win32finddata) (errno int) = FindNextFileW
127
//sys FindClose(handle int32) (errno int)
128
//sys GetFileInformationByHandle(handle int32, data *ByHandleFileInformation) (errno int)
125
//sys CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile int32) (handle Handle, errno int) [failretval==InvalidHandle] = CreateFileW
126
//sys ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (errno int)
127
//sys WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (errno int)
128
//sys SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, errno int) [failretval==0xffffffff]
129
//sys CloseHandle(handle Handle) (errno int)
130
//sys GetStdHandle(stdhandle int) (handle Handle, errno int) [failretval==InvalidHandle]
131
//sys FindFirstFile(name *uint16, data *Win32finddata) (handle Handle, errno int) [failretval==InvalidHandle] = FindFirstFileW
132
//sys FindNextFile(handle Handle, data *Win32finddata) (errno int) = FindNextFileW
133
//sys FindClose(handle Handle) (errno int)
134
//sys GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (errno int)
129
135
//sys GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, errno int) = GetCurrentDirectoryW
130
136
//sys SetCurrentDirectory(path *uint16) (errno int) = SetCurrentDirectoryW
131
137
//sys CreateDirectory(path *uint16, sa *SecurityAttributes) (errno int) = CreateDirectoryW
133
139
//sys DeleteFile(path *uint16) (errno int) = DeleteFileW
134
140
//sys MoveFile(from *uint16, to *uint16) (errno int) = MoveFileW
135
141
//sys GetComputerName(buf *uint16, n *uint32) (errno int) = GetComputerNameW
136
//sys SetEndOfFile(handle int32) (errno int)
142
//sys SetEndOfFile(handle Handle) (errno int)
137
143
//sys GetSystemTimeAsFileTime(time *Filetime)
138
144
//sys sleep(msec uint32) = Sleep
139
145
//sys GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, errno int) [failretval==0xffffffff]
140
//sys CreateIoCompletionPort(filehandle int32, cphandle int32, key uint32, threadcnt uint32) (handle int32, errno int)
141
//sys GetQueuedCompletionStatus(cphandle int32, qty *uint32, key *uint32, overlapped **Overlapped, timeout uint32) (errno int)
142
//sys CancelIo(s uint32) (errno int)
146
//sys CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uint32, threadcnt uint32) (handle Handle, errno int)
147
//sys GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uint32, overlapped **Overlapped, timeout uint32) (errno int)
148
//sys CancelIo(s Handle) (errno int)
143
149
//sys CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (errno int) = CreateProcessW
144
//sys OpenProcess(da uint32, inheritHandle bool, pid uint32) (handle int32, errno int)
145
//sys TerminateProcess(handle int32, exitcode uint32) (errno int)
146
//sys GetExitCodeProcess(handle int32, exitcode *uint32) (errno int)
150
//sys OpenProcess(da uint32, inheritHandle bool, pid uint32) (handle Handle, errno int)
151
//sys TerminateProcess(handle Handle, exitcode uint32) (errno int)
152
//sys GetExitCodeProcess(handle Handle, exitcode *uint32) (errno int)
147
153
//sys GetStartupInfo(startupInfo *StartupInfo) (errno int) = GetStartupInfoW
148
//sys GetCurrentProcess() (pseudoHandle int32, errno int)
149
//sys DuplicateHandle(hSourceProcessHandle int32, hSourceHandle int32, hTargetProcessHandle int32, lpTargetHandle *int32, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (errno int)
150
//sys WaitForSingleObject(handle int32, waitMilliseconds uint32) (event uint32, errno int) [failretval==0xffffffff]
154
//sys GetCurrentProcess() (pseudoHandle Handle, errno int)
155
//sys DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (errno int)
156
//sys WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, errno int) [failretval==0xffffffff]
151
157
//sys GetTempPath(buflen uint32, buf *uint16) (n uint32, errno int) = GetTempPathW
152
//sys CreatePipe(readhandle *uint32, writehandle *uint32, sa *SecurityAttributes, size uint32) (errno int)
153
//sys GetFileType(filehandle uint32) (n uint32, errno int)
154
//sys CryptAcquireContext(provhandle *uint32, container *uint16, provider *uint16, provtype uint32, flags uint32) (errno int) = advapi32.CryptAcquireContextW
155
//sys CryptReleaseContext(provhandle uint32, flags uint32) (errno int) = advapi32.CryptReleaseContext
156
//sys CryptGenRandom(provhandle uint32, buflen uint32, buf *byte) (errno int) = advapi32.CryptGenRandom
158
//sys CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (errno int)
159
//sys GetFileType(filehandle Handle) (n uint32, errno int)
160
//sys CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (errno int) = advapi32.CryptAcquireContextW
161
//sys CryptReleaseContext(provhandle Handle, flags uint32) (errno int) = advapi32.CryptReleaseContext
162
//sys CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (errno int) = advapi32.CryptGenRandom
157
163
//sys GetEnvironmentStrings() (envs *uint16, errno int) [failretval==nil] = kernel32.GetEnvironmentStringsW
158
164
//sys FreeEnvironmentStrings(envs *uint16) (errno int) = kernel32.FreeEnvironmentStringsW
159
165
//sys GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, errno int) = kernel32.GetEnvironmentVariableW
160
166
//sys SetEnvironmentVariable(name *uint16, value *uint16) (errno int) = kernel32.SetEnvironmentVariableW
161
//sys SetFileTime(handle int32, ctime *Filetime, atime *Filetime, wtime *Filetime) (errno int)
167
//sys SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (errno int)
162
168
//sys GetFileAttributes(name *uint16) (attrs uint32, errno int) [failretval==INVALID_FILE_ATTRIBUTES] = kernel32.GetFileAttributesW
163
169
//sys SetFileAttributes(name *uint16, attrs uint32) (errno int) = kernel32.SetFileAttributesW
164
170
//sys GetCommandLine() (cmd *uint16) = kernel32.GetCommandLineW
165
171
//sys CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, errno int) [failretval==nil] = shell32.CommandLineToArgvW
166
//sys LocalFree(hmem uint32) (handle uint32, errno int) [failretval!=0]
167
//sys SetHandleInformation(handle int32, mask uint32, flags uint32) (errno int)
168
//sys FlushFileBuffers(handle int32) (errno int)
172
//sys LocalFree(hmem Handle) (handle Handle, errno int) [failretval!=0]
173
//sys SetHandleInformation(handle Handle, mask uint32, flags uint32) (errno int)
174
//sys FlushFileBuffers(handle Handle) (errno int)
169
175
//sys GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, errno int) = kernel32.GetFullPathNameW
170
//sys CreateFileMapping(fhandle int32, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle int32, errno int) = kernel32.CreateFileMappingW
171
//sys MapViewOfFile(handle int32, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, errno int)
176
//sys CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, errno int) = kernel32.CreateFileMappingW
177
//sys MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, errno int)
172
178
//sys UnmapViewOfFile(addr uintptr) (errno int)
173
179
//sys FlushViewOfFile(addr uintptr, length uintptr) (errno int)
174
180
//sys VirtualLock(addr uintptr, length uintptr) (errno int)
175
181
//sys VirtualUnlock(addr uintptr, length uintptr) (errno int)
182
//sys TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (errno int) = wsock32.TransmitFile
177
184
// syscall interface implementation for other packages
468
475
//sys WSAStartup(verreq uint32, data *WSAData) (sockerrno int) = wsock32.WSAStartup
469
476
//sys WSACleanup() (errno int) [failretval==-1] = wsock32.WSACleanup
470
//sys socket(af int32, typ int32, protocol int32) (handle int32, errno int) [failretval==-1] = wsock32.socket
471
//sys setsockopt(s int32, level int32, optname int32, optval *byte, optlen int32) (errno int) [failretval==-1] = wsock32.setsockopt
472
//sys bind(s int32, name uintptr, namelen int32) (errno int) [failretval==-1] = wsock32.bind
473
//sys connect(s int32, name uintptr, namelen int32) (errno int) [failretval==-1] = wsock32.connect
474
//sys getsockname(s int32, rsa *RawSockaddrAny, addrlen *int32) (errno int) [failretval==-1] = wsock32.getsockname
475
//sys getpeername(s int32, rsa *RawSockaddrAny, addrlen *int32) (errno int) [failretval==-1] = wsock32.getpeername
476
//sys listen(s int32, backlog int32) (errno int) [failretval==-1] = wsock32.listen
477
//sys shutdown(s int32, how int32) (errno int) [failretval==-1] = wsock32.shutdown
478
//sys Closesocket(s int32) (errno int) [failretval==-1] = wsock32.closesocket
479
//sys AcceptEx(ls uint32, as uint32, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (errno int) = wsock32.AcceptEx
477
//sys WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (errno int) [failretval==-1] = ws2_32.WSAIoctl
478
//sys socket(af int32, typ int32, protocol int32) (handle Handle, errno int) [failretval==InvalidHandle] = wsock32.socket
479
//sys setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (errno int) [failretval==-1] = wsock32.setsockopt
480
//sys bind(s Handle, name uintptr, namelen int32) (errno int) [failretval==-1] = wsock32.bind
481
//sys connect(s Handle, name uintptr, namelen int32) (errno int) [failretval==-1] = wsock32.connect
482
//sys getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (errno int) [failretval==-1] = wsock32.getsockname
483
//sys getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (errno int) [failretval==-1] = wsock32.getpeername
484
//sys listen(s Handle, backlog int32) (errno int) [failretval==-1] = wsock32.listen
485
//sys shutdown(s Handle, how int32) (errno int) [failretval==-1] = wsock32.shutdown
486
//sys Closesocket(s Handle) (errno int) [failretval==-1] = wsock32.closesocket
487
//sys AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (errno int) = wsock32.AcceptEx
480
488
//sys GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) = wsock32.GetAcceptExSockaddrs
481
//sys WSARecv(s uint32, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (errno int) [failretval==-1] = ws2_32.WSARecv
482
//sys WSASend(s uint32, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (errno int) [failretval==-1] = ws2_32.WSASend
483
//sys WSARecvFrom(s uint32, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (errno int) [failretval==-1] = ws2_32.WSARecvFrom
484
//sys WSASendTo(s uint32, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (errno int) [failretval==-1] = ws2_32.WSASendTo
489
//sys WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (errno int) [failretval==-1] = ws2_32.WSARecv
490
//sys WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (errno int) [failretval==-1] = ws2_32.WSASend
491
//sys WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (errno int) [failretval==-1] = ws2_32.WSARecvFrom
492
//sys WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (errno int) [failretval==-1] = ws2_32.WSASendTo
485
493
//sys GetHostByName(name string) (h *Hostent, errno int) [failretval==nil] = ws2_32.gethostbyname
486
494
//sys GetServByName(name string, proto string) (s *Servent, errno int) [failretval==nil] = ws2_32.getservbyname
487
495
//sys Ntohs(netshort uint16) (u uint16) = ws2_32.ntohs
488
496
//sys DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status uint32) = dnsapi.DnsQuery_W
489
497
//sys DnsRecordListFree(rl *DNSRecord, freetype uint32) = dnsapi.DnsRecordListFree
498
//sys GetIfEntry(pIfRow *MibIfRow) (errcode int) = iphlpapi.GetIfEntry
499
//sys GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode int) = iphlpapi.GetAdaptersInfo
491
501
// For testing: clients can set this flag to force
492
502
// creation of IPv6 sockets to return EAFNOSUPPORT.
574
584
return nil, EAFNOSUPPORT
577
func Socket(domain, typ, proto int) (fd, errno int) {
587
func Socket(domain, typ, proto int) (fd Handle, errno int) {
578
588
if domain == AF_INET6 && SocketDisableIPv6 {
579
return -1, EAFNOSUPPORT
589
return InvalidHandle, EAFNOSUPPORT
581
591
h, e := socket(int32(domain), int32(typ), int32(proto))
582
return int(h), int(e)
585
func SetsockoptInt(fd, level, opt int, value int) (errno int) {
595
func SetsockoptInt(fd Handle, level, opt int, value int) (errno int) {
586
596
v := int32(value)
587
return int(setsockopt(int32(fd), int32(level), int32(opt), (*byte)(unsafe.Pointer(&v)), int32(unsafe.Sizeof(v))))
590
func Bind(fd int, sa Sockaddr) (errno int) {
591
ptr, n, err := sa.sockaddr()
595
return bind(int32(fd), ptr, n)
598
func Connect(fd int, sa Sockaddr) (errno int) {
599
ptr, n, err := sa.sockaddr()
603
return connect(int32(fd), ptr, n)
606
func Getsockname(fd int) (sa Sockaddr, errno int) {
607
var rsa RawSockaddrAny
608
l := int32(unsafe.Sizeof(rsa))
609
if errno = getsockname(int32(fd), &rsa, &l); errno != 0 {
612
return rsa.Sockaddr()
615
func Getpeername(fd int) (sa Sockaddr, errno int) {
616
var rsa RawSockaddrAny
617
l := int32(unsafe.Sizeof(rsa))
618
if errno = getpeername(int32(fd), &rsa, &l); errno != 0 {
621
return rsa.Sockaddr()
624
func Listen(s int, n int) (errno int) {
625
return int(listen(int32(s), int32(n)))
628
func Shutdown(fd, how int) (errno int) {
629
return int(shutdown(int32(fd), int32(how)))
632
func WSASendto(s uint32, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to Sockaddr, overlapped *Overlapped, croutine *byte) (errno int) {
597
return int(setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&v)), int32(unsafe.Sizeof(v))))
600
func Bind(fd Handle, sa Sockaddr) (errno int) {
601
ptr, n, err := sa.sockaddr()
605
return bind(fd, ptr, n)
608
func Connect(fd Handle, sa Sockaddr) (errno int) {
609
ptr, n, err := sa.sockaddr()
613
return connect(fd, ptr, n)
616
func Getsockname(fd Handle) (sa Sockaddr, errno int) {
617
var rsa RawSockaddrAny
618
l := int32(unsafe.Sizeof(rsa))
619
if errno = getsockname(fd, &rsa, &l); errno != 0 {
622
return rsa.Sockaddr()
625
func Getpeername(fd Handle) (sa Sockaddr, errno int) {
626
var rsa RawSockaddrAny
627
l := int32(unsafe.Sizeof(rsa))
628
if errno = getpeername(fd, &rsa, &l); errno != 0 {
631
return rsa.Sockaddr()
634
func Listen(s Handle, n int) (errno int) {
635
return int(listen(s, int32(n)))
638
func Shutdown(fd Handle, how int) (errno int) {
639
return int(shutdown(fd, int32(how)))
642
func WSASendto(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to Sockaddr, overlapped *Overlapped, croutine *byte) (errno int) {
633
643
rsa, l, err := to.sockaddr()
694
func SetsockoptLinger(fd, level, opt int, l *Linger) (errno int) { return EWINDOWS }
695
func SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (errno int) { return EWINDOWS }
696
func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (errno int) { return EWINDOWS }
697
func BindToDevice(fd int, device string) (errno int) { return EWINDOWS }
706
func SetsockoptLinger(fd Handle, level, opt int, l *Linger) (errno int) { return EWINDOWS }
707
func SetsockoptIPMreq(fd Handle, level, opt int, mreq *IPMreq) (errno int) { return EWINDOWS }
708
func SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (errno int) { return EWINDOWS }
709
func BindToDevice(fd Handle, device string) (errno int) { return EWINDOWS }
699
711
// TODO(brainman): fix all needed for os
701
713
func Getpid() (pid int) { return -1 }
702
714
func Getppid() (ppid int) { return -1 }
704
func Fchdir(fd int) (errno int) { return EWINDOWS }
716
func Fchdir(fd Handle) (errno int) { return EWINDOWS }
705
717
func Link(oldpath, newpath string) (errno int) { return EWINDOWS }
706
718
func Symlink(path, link string) (errno int) { return EWINDOWS }
707
719
func Readlink(path string, buf []byte) (n int, errno int) { return 0, EWINDOWS }
709
func Fchmod(fd int, mode uint32) (errno int) { return EWINDOWS }
721
func Fchmod(fd Handle, mode uint32) (errno int) { return EWINDOWS }
710
722
func Chown(path string, uid int, gid int) (errno int) { return EWINDOWS }
711
723
func Lchown(path string, uid int, gid int) (errno int) { return EWINDOWS }
712
func Fchown(fd int, uid int, gid int) (errno int) { return EWINDOWS }
724
func Fchown(fd Handle, uid int, gid int) (errno int) { return EWINDOWS }
714
726
func Getuid() (uid int) { return -1 }
715
727
func Geteuid() (euid int) { return -1 }