LEFT | RIGHT |
1 // Copyright 2009 The Go Authors. All rights reserved. | 1 // Copyright 2009 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 | 4 |
5 // Windows system calls. | 5 // Windows system calls. |
6 | 6 |
7 package syscall | 7 package syscall |
8 | 8 |
9 import ( | 9 import ( |
10 "unicode/utf16" | 10 "unicode/utf16" |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 //sys DeleteFile(path *uint16) (err error) = DeleteFileW | 135 //sys DeleteFile(path *uint16) (err error) = DeleteFileW |
136 //sys MoveFile(from *uint16, to *uint16) (err error) = MoveFileW | 136 //sys MoveFile(from *uint16, to *uint16) (err error) = MoveFileW |
137 //sys GetComputerName(buf *uint16, n *uint32) (err error) = GetComputerNameW | 137 //sys GetComputerName(buf *uint16, n *uint32) (err error) = GetComputerNameW |
138 //sys SetEndOfFile(handle Handle) (err error) | 138 //sys SetEndOfFile(handle Handle) (err error) |
139 //sys GetSystemTimeAsFileTime(time *Filetime) | 139 //sys GetSystemTimeAsFileTime(time *Filetime) |
140 //sys GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error)
[failretval==0xffffffff] | 140 //sys GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error)
[failretval==0xffffffff] |
141 //sys CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uint32, t
hreadcnt uint32) (handle Handle, err error) | 141 //sys CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uint32, t
hreadcnt uint32) (handle Handle, err error) |
142 //sys GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uint32, ove
rlapped **Overlapped, timeout uint32) (err error) | 142 //sys GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uint32, ove
rlapped **Overlapped, timeout uint32) (err error) |
143 //sys PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uint32, over
lapped *Overlapped) (err error) | 143 //sys PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uint32, over
lapped *Overlapped) (err error) |
144 //sys CancelIo(s Handle) (err error) | 144 //sys CancelIo(s Handle) (err error) |
| 145 //sys CancelIoEx(s Handle, o *Overlapped) (err error) |
145 //sys CreateProcess(appName *uint16, commandLine *uint16, procSecurity *Securi
tyAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationF
lags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcI
nfo *ProcessInformation) (err error) = CreateProcessW | 146 //sys CreateProcess(appName *uint16, commandLine *uint16, procSecurity *Securi
tyAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationF
lags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcI
nfo *ProcessInformation) (err error) = CreateProcessW |
146 //sys OpenProcess(da uint32, inheritHandle bool, pid uint32) (handle Handle, e
rr error) | 147 //sys OpenProcess(da uint32, inheritHandle bool, pid uint32) (handle Handle, e
rr error) |
147 //sys TerminateProcess(handle Handle, exitcode uint32) (err error) | 148 //sys TerminateProcess(handle Handle, exitcode uint32) (err error) |
148 //sys GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) | 149 //sys GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) |
149 //sys GetStartupInfo(startupInfo *StartupInfo) (err error) = GetStartupInfoW | 150 //sys GetStartupInfo(startupInfo *StartupInfo) (err error) = GetStartupInfoW |
150 //sys GetCurrentProcess() (pseudoHandle Handle, err error) | 151 //sys GetCurrentProcess() (pseudoHandle Handle, err error) |
151 //sys GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetim
e, kernelTime *Filetime, userTime *Filetime) (err error) | 152 //sys GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetim
e, kernelTime *Filetime, userTime *Filetime) (err error) |
152 //sys DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTarg
etProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInherit
Handle bool, dwOptions uint32) (err error) | 153 //sys DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTarg
etProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInherit
Handle bool, dwOptions uint32) (err error) |
153 //sys WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint3
2, err error) [failretval==0xffffffff] | 154 //sys WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint3
2, err error) [failretval==0xffffffff] |
154 //sys GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) = GetTempP
athW | 155 //sys GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) = GetTempP
athW |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 //sys CertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertF
reeCertificateContext | 193 //sys CertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertF
reeCertificateContext |
193 //sys CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainCont
ext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = cry
pt32.CertVerifyCertificateChainPolicy | 194 //sys CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainCont
ext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = cry
pt32.CertVerifyCertificateChainPolicy |
194 //sys RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess u
int32, result *Handle) (regerrno error) = advapi32.RegOpenKeyExW | 195 //sys RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess u
int32, result *Handle) (regerrno error) = advapi32.RegOpenKeyExW |
195 //sys RegCloseKey(key Handle) (regerrno error) = advapi32.RegCloseKey | 196 //sys RegCloseKey(key Handle) (regerrno error) = advapi32.RegCloseKey |
196 //sys RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *u
int32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen
*uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteT
ime *Filetime) (regerrno error) = advapi32.RegQueryInfoKeyW | 197 //sys RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *u
int32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen
*uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteT
ime *Filetime) (regerrno error) = advapi32.RegQueryInfoKeyW |
197 //sys RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, re
served *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (reger
rno error) = advapi32.RegEnumKeyExW | 198 //sys RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, re
served *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (reger
rno error) = advapi32.RegEnumKeyExW |
198 //sys RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uin
t32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegQueryValueExW | 199 //sys RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uin
t32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegQueryValueExW |
199 //sys getCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId | 200 //sys getCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId |
200 //sys GetConsoleMode(console Handle, mode *uint32) (err error) = kernel32.GetC
onsoleMode | 201 //sys GetConsoleMode(console Handle, mode *uint32) (err error) = kernel32.GetC
onsoleMode |
201 //sys WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint3
2, reserved *byte) (err error) = kernel32.WriteConsoleW | 202 //sys WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint3
2, reserved *byte) (err error) = kernel32.WriteConsoleW |
202 //sys» getModuleFileName(module Handle, fn *uint16, len uint32) (n uint32, err
error) = kernel32.GetModuleFileNameW | 203 //sys» GetModuleFileName(module Handle, fn *uint16, len uint32) (n uint32, err
error) = kernel32.GetModuleFileNameW |
203 | 204 |
204 // syscall interface implementation for other packages | 205 // syscall interface implementation for other packages |
205 | 206 |
206 func Exit(code int) { ExitProcess(uint32(code)) } | 207 func Exit(code int) { ExitProcess(uint32(code)) } |
207 | 208 |
208 func makeInheritSa() *SecurityAttributes { | 209 func makeInheritSa() *SecurityAttributes { |
209 var sa SecurityAttributes | 210 var sa SecurityAttributes |
210 sa.Length = uint32(unsafe.Sizeof(sa)) | 211 sa.Length = uint32(unsafe.Sizeof(sa)) |
211 sa.InheritHandle = 1 | 212 sa.InheritHandle = 1 |
212 return &sa | 213 return &sa |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) | 445 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) |
445 if e != nil { | 446 if e != nil { |
446 return e | 447 return e |
447 } | 448 } |
448 defer Close(h) | 449 defer Close(h) |
449 a := NsecToFiletime(tv[0].Nanoseconds()) | 450 a := NsecToFiletime(tv[0].Nanoseconds()) |
450 w := NsecToFiletime(tv[1].Nanoseconds()) | 451 w := NsecToFiletime(tv[1].Nanoseconds()) |
451 return SetFileTime(h, nil, &a, &w) | 452 return SetFileTime(h, nil, &a, &w) |
452 } | 453 } |
453 | 454 |
| 455 func UtimesNano(path string, ts []Timespec) (err error) { |
| 456 if len(ts) != 2 { |
| 457 return EINVAL |
| 458 } |
| 459 pathp, e := UTF16PtrFromString(path) |
| 460 if e != nil { |
| 461 return e |
| 462 } |
| 463 h, e := CreateFile(pathp, |
| 464 FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil, |
| 465 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) |
| 466 if e != nil { |
| 467 return e |
| 468 } |
| 469 defer Close(h) |
| 470 a := NsecToFiletime(TimespecToNsec(ts[0])) |
| 471 w := NsecToFiletime(TimespecToNsec(ts[1])) |
| 472 return SetFileTime(h, nil, &a, &w) |
| 473 } |
| 474 |
454 func Fsync(fd Handle) (err error) { | 475 func Fsync(fd Handle) (err error) { |
455 return FlushFileBuffers(fd) | 476 return FlushFileBuffers(fd) |
456 } | 477 } |
457 | 478 |
458 func Chmod(path string, mode uint32) (err error) { | 479 func Chmod(path string, mode uint32) (err error) { |
459 if mode == 0 { | 480 if mode == 0 { |
460 return EINVAL | 481 return EINVAL |
461 } | 482 } |
462 p, e := UTF16PtrFromString(path) | 483 p, e := UTF16PtrFromString(path) |
463 if e != nil { | 484 if e != nil { |
464 return e | 485 return e |
465 } | 486 } |
466 attrs, e := GetFileAttributes(p) | 487 attrs, e := GetFileAttributes(p) |
467 if e != nil { | 488 if e != nil { |
468 return e | 489 return e |
469 } | 490 } |
470 if mode&S_IWRITE != 0 { | 491 if mode&S_IWRITE != 0 { |
471 attrs &^= FILE_ATTRIBUTE_READONLY | 492 attrs &^= FILE_ATTRIBUTE_READONLY |
472 } else { | 493 } else { |
473 attrs |= FILE_ATTRIBUTE_READONLY | 494 attrs |= FILE_ATTRIBUTE_READONLY |
474 } | 495 } |
475 return SetFileAttributes(p, attrs) | 496 return SetFileAttributes(p, attrs) |
| 497 } |
| 498 |
| 499 func LoadCancelIoEx() error { |
| 500 return procCancelIoEx.Find() |
476 } | 501 } |
477 | 502 |
478 // net api calls | 503 // net api calls |
479 | 504 |
480 const socket_error = uintptr(^uint32(0)) | 505 const socket_error = uintptr(^uint32(0)) |
481 | 506 |
482 //sys WSAStartup(verreq uint32, data *WSAData) (sockerr error) = ws2_32.WSASta
rtup | 507 //sys WSAStartup(verreq uint32, data *WSAData) (sockerr error) = ws2_32.WSASta
rtup |
483 //sys WSACleanup() (err error) [failretval==socket_error] = ws2_32.WSACleanup | 508 //sys WSACleanup() (err error) [failretval==socket_error] = ws2_32.WSACleanup |
484 //sys WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte,
cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (e
rr error) [failretval==socket_error] = ws2_32.WSAIoctl | 509 //sys WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte,
cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (e
rr error) [failretval==socket_error] = ws2_32.WSAIoctl |
485 //sys socket(af int32, typ int32, protocol int32) (handle Handle, err error) [
failretval==InvalidHandle] = ws2_32.socket | 510 //sys socket(af int32, typ int32, protocol int32) (handle Handle, err error) [
failretval==InvalidHandle] = ws2_32.socket |
(...skipping 11 matching lines...) Expand all Loading... |
497 //sys WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uin
t32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_err
or] = ws2_32.WSARecv | 522 //sys WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uin
t32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_err
or] = ws2_32.WSARecv |
498 //sys WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint3
2, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error
] = ws2_32.WSASend | 523 //sys WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint3
2, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error
] = ws2_32.WSASend |
499 //sys WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags
*uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine
*byte) (err error) [failretval==socket_error] = ws2_32.WSARecvFrom | 524 //sys WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags
*uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine
*byte) (err error) [failretval==socket_error] = ws2_32.WSARecvFrom |
500 //sys WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uin
t32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (
err error) [failretval==socket_error] = ws2_32.WSASendTo | 525 //sys WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uin
t32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (
err error) [failretval==socket_error] = ws2_32.WSASendTo |
501 //sys GetHostByName(name string) (h *Hostent, err error) [failretval==nil] = w
s2_32.gethostbyname | 526 //sys GetHostByName(name string) (h *Hostent, err error) [failretval==nil] = w
s2_32.gethostbyname |
502 //sys GetServByName(name string, proto string) (s *Servent, err error) [failre
tval==nil] = ws2_32.getservbyname | 527 //sys GetServByName(name string, proto string) (s *Servent, err error) [failre
tval==nil] = ws2_32.getservbyname |
503 //sys Ntohs(netshort uint16) (u uint16) = ws2_32.ntohs | 528 //sys Ntohs(netshort uint16) (u uint16) = ws2_32.ntohs |
504 //sys GetProtoByName(name string) (p *Protoent, err error) [failretval==nil] =
ws2_32.getprotobyname | 529 //sys GetProtoByName(name string) (p *Protoent, err error) [failretval==nil] =
ws2_32.getprotobyname |
505 //sys DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **D
NSRecord, pr *byte) (status error) = dnsapi.DnsQuery_W | 530 //sys DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **D
NSRecord, pr *byte) (status error) = dnsapi.DnsQuery_W |
506 //sys DnsRecordListFree(rl *DNSRecord, freetype uint32) = dnsapi.DnsRecordList
Free | 531 //sys DnsRecordListFree(rl *DNSRecord, freetype uint32) = dnsapi.DnsRecordList
Free |
| 532 //sys GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, re
sult **AddrinfoW) (sockerr error) = ws2_32.GetAddrInfoW |
| 533 //sys FreeAddrInfoW(addrinfo *AddrinfoW) = ws2_32.FreeAddrInfoW |
507 //sys GetIfEntry(pIfRow *MibIfRow) (errcode error) = iphlpapi.GetIfEntry | 534 //sys GetIfEntry(pIfRow *MibIfRow) (errcode error) = iphlpapi.GetIfEntry |
508 //sys GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) = iphlpap
i.GetAdaptersInfo | 535 //sys GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) = iphlpap
i.GetAdaptersInfo |
509 | 536 |
510 // For testing: clients can set this flag to force | 537 // For testing: clients can set this flag to force |
511 // creation of IPv6 sockets to return EAFNOSUPPORT. | 538 // creation of IPv6 sockets to return EAFNOSUPPORT. |
512 var SocketDisableIPv6 bool | 539 var SocketDisableIPv6 bool |
513 | 540 |
514 type RawSockaddrInet4 struct { | 541 type RawSockaddrInet4 struct { |
515 Family uint16 | 542 Family uint16 |
516 Port uint16 | 543 Port uint16 |
517 Addr [4]byte /* in_addr */ | 544 Addr [4]byte /* in_addr */ |
518 Zero [8]uint8 | 545 Zero [8]uint8 |
| 546 } |
| 547 |
| 548 type RawSockaddrInet6 struct { |
| 549 Family uint16 |
| 550 Port uint16 |
| 551 Flowinfo uint32 |
| 552 Addr [16]byte /* in6_addr */ |
| 553 Scope_id uint32 |
519 } | 554 } |
520 | 555 |
521 type RawSockaddr struct { | 556 type RawSockaddr struct { |
522 Family uint16 | 557 Family uint16 |
523 Data [14]int8 | 558 Data [14]int8 |
524 } | 559 } |
525 | 560 |
526 type RawSockaddrAny struct { | 561 type RawSockaddrAny struct { |
527 Addr RawSockaddr | 562 Addr RawSockaddr |
528 Pad [96]int8 | 563 Pad [96]int8 |
(...skipping 20 matching lines...) Expand all Loading... |
549 for i := 0; i < len(sa.Addr); i++ { | 584 for i := 0; i < len(sa.Addr); i++ { |
550 sa.raw.Addr[i] = sa.Addr[i] | 585 sa.raw.Addr[i] = sa.Addr[i] |
551 } | 586 } |
552 return uintptr(unsafe.Pointer(&sa.raw)), int32(unsafe.Sizeof(sa.raw)), n
il | 587 return uintptr(unsafe.Pointer(&sa.raw)), int32(unsafe.Sizeof(sa.raw)), n
il |
553 } | 588 } |
554 | 589 |
555 type SockaddrInet6 struct { | 590 type SockaddrInet6 struct { |
556 Port int | 591 Port int |
557 ZoneId uint32 | 592 ZoneId uint32 |
558 Addr [16]byte | 593 Addr [16]byte |
| 594 raw RawSockaddrInet6 |
559 } | 595 } |
560 | 596 |
561 func (sa *SockaddrInet6) sockaddr() (uintptr, int32, error) { | 597 func (sa *SockaddrInet6) sockaddr() (uintptr, int32, error) { |
562 » // TODO(brainman): implement SockaddrInet6.sockaddr() | 598 » if sa.Port < 0 || sa.Port > 0xFFFF { |
563 » return 0, 0, EWINDOWS | 599 » » return 0, 0, EINVAL |
| 600 » } |
| 601 » sa.raw.Family = AF_INET6 |
| 602 » p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) |
| 603 » p[0] = byte(sa.Port >> 8) |
| 604 » p[1] = byte(sa.Port) |
| 605 » sa.raw.Scope_id = sa.ZoneId |
| 606 » for i := 0; i < len(sa.Addr); i++ { |
| 607 » » sa.raw.Addr[i] = sa.Addr[i] |
| 608 » } |
| 609 » return uintptr(unsafe.Pointer(&sa.raw)), int32(unsafe.Sizeof(sa.raw)), n
il |
564 } | 610 } |
565 | 611 |
566 type SockaddrUnix struct { | 612 type SockaddrUnix struct { |
567 Name string | 613 Name string |
568 } | 614 } |
569 | 615 |
570 func (sa *SockaddrUnix) sockaddr() (uintptr, int32, error) { | 616 func (sa *SockaddrUnix) sockaddr() (uintptr, int32, error) { |
571 // TODO(brainman): implement SockaddrUnix.sockaddr() | 617 // TODO(brainman): implement SockaddrUnix.sockaddr() |
572 return 0, 0, EWINDOWS | 618 return 0, 0, EWINDOWS |
573 } | 619 } |
574 | 620 |
575 func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { | 621 func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { |
576 switch rsa.Addr.Family { | 622 switch rsa.Addr.Family { |
577 case AF_UNIX: | 623 case AF_UNIX: |
578 return nil, EWINDOWS | 624 return nil, EWINDOWS |
579 | 625 |
580 case AF_INET: | 626 case AF_INET: |
581 pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) | 627 pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) |
582 sa := new(SockaddrInet4) | 628 sa := new(SockaddrInet4) |
583 p := (*[2]byte)(unsafe.Pointer(&pp.Port)) | 629 p := (*[2]byte)(unsafe.Pointer(&pp.Port)) |
584 sa.Port = int(p[0])<<8 + int(p[1]) | 630 sa.Port = int(p[0])<<8 + int(p[1]) |
585 for i := 0; i < len(sa.Addr); i++ { | 631 for i := 0; i < len(sa.Addr); i++ { |
586 sa.Addr[i] = pp.Addr[i] | 632 sa.Addr[i] = pp.Addr[i] |
587 } | 633 } |
588 return sa, nil | 634 return sa, nil |
589 | 635 |
590 case AF_INET6: | 636 case AF_INET6: |
591 » » return nil, EWINDOWS | 637 » » pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) |
| 638 » » sa := new(SockaddrInet6) |
| 639 » » p := (*[2]byte)(unsafe.Pointer(&pp.Port)) |
| 640 » » sa.Port = int(p[0])<<8 + int(p[1]) |
| 641 » » sa.ZoneId = pp.Scope_id |
| 642 » » for i := 0; i < len(sa.Addr); i++ { |
| 643 » » » sa.Addr[i] = pp.Addr[i] |
| 644 » » } |
| 645 » » return sa, nil |
592 } | 646 } |
593 return nil, EAFNOSUPPORT | 647 return nil, EAFNOSUPPORT |
594 } | 648 } |
595 | 649 |
596 func Socket(domain, typ, proto int) (fd Handle, err error) { | 650 func Socket(domain, typ, proto int) (fd Handle, err error) { |
597 if domain == AF_INET6 && SocketDisableIPv6 { | 651 if domain == AF_INET6 && SocketDisableIPv6 { |
598 return InvalidHandle, EAFNOSUPPORT | 652 return InvalidHandle, EAFNOSUPPORT |
599 } | 653 } |
600 return socket(int32(domain), int32(typ), int32(proto)) | 654 return socket(int32(domain), int32(typ), int32(proto)) |
601 } | 655 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
646 func Shutdown(fd Handle, how int) (err error) { | 700 func Shutdown(fd Handle, how int) (err error) { |
647 return shutdown(fd, int32(how)) | 701 return shutdown(fd, int32(how)) |
648 } | 702 } |
649 | 703 |
650 func WSASendto(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32
, to Sockaddr, overlapped *Overlapped, croutine *byte) (err error) { | 704 func WSASendto(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32
, to Sockaddr, overlapped *Overlapped, croutine *byte) (err error) { |
651 rsa, l, err := to.sockaddr() | 705 rsa, l, err := to.sockaddr() |
652 if err != nil { | 706 if err != nil { |
653 return err | 707 return err |
654 } | 708 } |
655 return WSASendTo(s, bufs, bufcnt, sent, flags, (*RawSockaddrAny)(unsafe.
Pointer(rsa)), l, overlapped, croutine) | 709 return WSASendTo(s, bufs, bufcnt, sent, flags, (*RawSockaddrAny)(unsafe.
Pointer(rsa)), l, overlapped, croutine) |
| 710 } |
| 711 |
| 712 func LoadGetAddrInfo() error { |
| 713 return procGetAddrInfoW.Find() |
656 } | 714 } |
657 | 715 |
658 // Invented structures to support what package os expects. | 716 // Invented structures to support what package os expects. |
659 type Rusage struct { | 717 type Rusage struct { |
660 CreationTime Filetime | 718 CreationTime Filetime |
661 ExitTime Filetime | 719 ExitTime Filetime |
662 KernelTime Filetime | 720 KernelTime Filetime |
663 UserTime Filetime | 721 UserTime Filetime |
664 } | 722 } |
665 | 723 |
(...skipping 17 matching lines...) Expand all Loading... |
683 | 741 |
684 func (w WaitStatus) Signaled() bool { return false } | 742 func (w WaitStatus) Signaled() bool { return false } |
685 | 743 |
686 func (w WaitStatus) TrapCause() int { return -1 } | 744 func (w WaitStatus) TrapCause() int { return -1 } |
687 | 745 |
688 // Timespec is an invented structure on Windows, but here for | 746 // Timespec is an invented structure on Windows, but here for |
689 // consistency with the syscall package for other operating systems. | 747 // consistency with the syscall package for other operating systems. |
690 type Timespec struct { | 748 type Timespec struct { |
691 Sec int64 | 749 Sec int64 |
692 Nsec int64 | 750 Nsec int64 |
| 751 } |
| 752 |
| 753 func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nse
c) } |
| 754 |
| 755 func NsecToTimespec(nsec int64) (ts Timespec) { |
| 756 ts.Sec = nsec / 1e9 |
| 757 ts.Nsec = nsec % 1e9 |
| 758 return |
693 } | 759 } |
694 | 760 |
695 // TODO(brainman): fix all needed for net | 761 // TODO(brainman): fix all needed for net |
696 | 762 |
697 func Accept(fd Handle) (nfd Handle, sa Sockaddr, err error) { return 0, nil, EWI
NDOWS } | 763 func Accept(fd Handle) (nfd Handle, sa Sockaddr, err error) { return 0, nil, EWI
NDOWS } |
698 func Recvfrom(fd Handle, p []byte, flags int) (n int, from Sockaddr, err error)
{ | 764 func Recvfrom(fd Handle, p []byte, flags int) (n int, from Sockaddr, err error)
{ |
699 return 0, nil, EWINDOWS | 765 return 0, nil, EWINDOWS |
700 } | 766 } |
701 func Sendto(fd Handle, p []byte, flags int, to Sockaddr) (err error) { ret
urn EWINDOWS } | 767 func Sendto(fd Handle, p []byte, flags int, to Sockaddr) (err error) { ret
urn EWINDOWS } |
702 func SetsockoptTimeval(fd Handle, level, opt int, tv *Timeval) (err error) { ret
urn EWINDOWS } | 768 func SetsockoptTimeval(fd Handle, level, opt int, tv *Timeval) (err error) { ret
urn EWINDOWS } |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
764 | 830 |
765 func FindNextFile(handle Handle, data *Win32finddata) (err error) { | 831 func FindNextFile(handle Handle, data *Win32finddata) (err error) { |
766 var data1 win32finddata1 | 832 var data1 win32finddata1 |
767 err = findNextFile1(handle, &data1) | 833 err = findNextFile1(handle, &data1) |
768 if err == nil { | 834 if err == nil { |
769 copyFindData(data, &data1) | 835 copyFindData(data, &data1) |
770 } | 836 } |
771 return | 837 return |
772 } | 838 } |
773 | 839 |
774 func GetModuleFileName(handle Handle) (string, error) { | |
775 n := uint32(1024) | |
776 var buf []uint16 | |
777 for { | |
778 buf = make([]uint16, n) | |
779 r, err := getModuleFileName(handle, &buf[0], n) | |
780 if err != nil { | |
781 return "", err | |
782 } | |
783 if r == n { | |
784 n += 1024 | |
785 continue | |
786 } | |
787 break | |
788 } | |
789 return UTF16ToString(buf), nil | |
790 } | |
791 | |
792 // TODO(brainman): fix all needed for os | 840 // TODO(brainman): fix all needed for os |
793 func Getppid() (ppid int) { return -1 } | 841 func Getppid() (ppid int) { return -1 } |
794 | 842 |
795 func Fchdir(fd Handle) (err error) { return EWINDOWS } | 843 func Fchdir(fd Handle) (err error) { return EWINDOWS } |
796 func Link(oldpath, newpath string) (err error) { return EWINDOWS } | 844 func Link(oldpath, newpath string) (err error) { return EWINDOWS } |
797 func Symlink(path, link string) (err error) { return EWINDOWS } | 845 func Symlink(path, link string) (err error) { return EWINDOWS } |
798 func Readlink(path string, buf []byte) (n int, err error) { return 0, EWINDOWS } | 846 func Readlink(path string, buf []byte) (n int, err error) { return 0, EWINDOWS } |
799 | 847 |
800 func Fchmod(fd Handle, mode uint32) (err error) { return EWINDOWS } | 848 func Fchmod(fd Handle, mode uint32) (err error) { return EWINDOWS } |
801 func Chown(path string, uid int, gid int) (err error) { return EWINDOWS } | 849 func Chown(path string, uid int, gid int) (err error) { return EWINDOWS } |
(...skipping 12 matching lines...) Expand all Loading... |
814 | 862 |
815 func (s Signal) String() string { | 863 func (s Signal) String() string { |
816 if 0 <= s && int(s) < len(signals) { | 864 if 0 <= s && int(s) < len(signals) { |
817 str := signals[s] | 865 str := signals[s] |
818 if str != "" { | 866 if str != "" { |
819 return str | 867 return str |
820 } | 868 } |
821 } | 869 } |
822 return "signal " + itoa(int(s)) | 870 return "signal " + itoa(int(s)) |
823 } | 871 } |
LEFT | RIGHT |