Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(91)

Delta Between Two Patch Sets: src/pkg/syscall/syscall_windows.go

Issue 6736069: code review 6736069: runtime, syscall, os: add os.ExecPath() (string, error)
Left Patch Set: diff -r 88c4bdf6cfb8 https://code.google.com/p/go/ Created 11 years, 5 months ago
Right Patch Set: diff -r 617db9efbdf1 https://code.google.com/p/go/ Created 11 years, 3 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « src/pkg/runtime/executable_darwin.c ('k') | src/pkg/syscall/zsyscall_windows_386.go » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
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
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
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
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
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
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
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
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
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
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 }
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b