diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/asyncdispatch.nim | 22 | ||||
-rw-r--r-- | lib/pure/rawsockets.nim | 34 | ||||
-rw-r--r-- | lib/system/sysio.nim | 5 |
3 files changed, 32 insertions, 29 deletions
diff --git a/lib/pure/asyncdispatch.nim b/lib/pure/asyncdispatch.nim index b172f18b3..f37ae79e3 100644 --- a/lib/pure/asyncdispatch.nim +++ b/lib/pure/asyncdispatch.nim @@ -154,7 +154,7 @@ when defined(windows) or defined(nimdoc): let p = getGlobalDispatcher() if CreateIOCompletionPort(sock.THandle, p.ioPort, cast[TCompletionKey](sock), 1) == 0: - OSError(OSLastError()) + osError(osLastError()) p.handles.incl(sock) proc verifyPresence(sock: TAsyncFD) = @@ -191,7 +191,7 @@ when defined(windows) or defined(nimdoc): lpNumberOfBytesTransferred, TOSErrorCode(-1)) dealloc(customOverlapped) else: - let errCode = OSLastError() + let errCode = osLastError() if lpOverlapped != nil: assert customOverlapped.data.sock == lpCompletionKey.TAsyncFD customOverlapped.data.cb(customOverlapped.data.sock, @@ -201,7 +201,7 @@ when defined(windows) or defined(nimdoc): if errCode.int32 == WAIT_TIMEOUT: # Timed out discard - else: OSError(errCode) + else: osError(errCode) var connectExPtr: pointer = nil var acceptExPtr: pointer = nil @@ -218,11 +218,11 @@ when defined(windows) or defined(nimdoc): proc initAll() = let dummySock = newRawSocket() if not initPointer(dummySock, connectExPtr, WSAID_CONNECTEX): - OSError(OSLastError()) + osError(osLastError()) if not initPointer(dummySock, acceptExPtr, WSAID_ACCEPTEX): - OSError(OSLastError()) + osError(osLastError()) if not initPointer(dummySock, getAcceptExSockAddrsPtr, WSAID_GETACCEPTEXSOCKADDRS): - OSError(OSLastError()) + osError(osLastError()) proc connectEx(s: TSocketHandle, name: ptr TSockAddr, namelen: cint, lpSendBuffer: pointer, dwSendDataLength: dword, @@ -283,7 +283,7 @@ when defined(windows) or defined(nimdoc): saddr.sin_addr.s_addr = INADDR_ANY if bindAddr(socket.TSocketHandle, cast[ptr TSockAddr](addr(saddr)), sizeof(saddr).TSockLen) < 0'i32: - OSError(OSLastError()) + osError(osLastError()) var aiList = getAddrInfo(address, port, af) var success = false @@ -314,7 +314,7 @@ when defined(windows) or defined(nimdoc): # free ``ol``. break else: - lastError = OSLastError() + lastError = osLastError() if lastError.int32 == ERROR_IO_PENDING: # In this case ``ol`` will be deallocated in ``poll``. success = true @@ -334,7 +334,7 @@ when defined(windows) or defined(nimdoc): ## Reads **up to** ``size`` bytes from ``socket``. Returned future will ## complete once all the data requested is read, a part of the data has been ## read, or the socket has disconnected in which case the future will - ## complete with a value of ``""`. + ## complete with a value of ``""``. # Things to note: @@ -370,7 +370,7 @@ when defined(windows) or defined(nimdoc): let ret = WSARecv(socket.TSocketHandle, addr dataBuf, 1, addr bytesReceived, addr flagsio, cast[POverlapped](ol), nil) if ret == -1: - let err = OSLastError() + let err = osLastError() if err.int32 != ERROR_IO_PENDING: retFuture.fail(newException(EOS, osErrorMsg(err))) dealloc(ol) @@ -449,7 +449,7 @@ when defined(windows) or defined(nimdoc): var retFuture = newFuture[tuple[address: string, client: TAsyncFD]]() var clientSock = newRawSocket() - if clientSock == OSInvalidSocket: osError(osLastError()) + if clientSock == osInvalidSocket: osError(osLastError()) const lpOutputLen = 1024 var lpOutputBuf = newString(lpOutputLen) diff --git a/lib/pure/rawsockets.nim b/lib/pure/rawsockets.nim index aeaa7f3b5..07b647b68 100644 --- a/lib/pure/rawsockets.nim +++ b/lib/pure/rawsockets.nim @@ -17,7 +17,9 @@ import unsigned, os when hostos == "solaris": {.passl: "-lsocket -lnsl".} -when defined(Windows): +const useWinVersion = defined(Windows) or defined(nimdoc) + +when useWinVersion: import winlean export WSAEWOULDBLOCK else: @@ -74,7 +76,7 @@ type length*: int addrList*: seq[string] -when defined(windows): +when useWinVersion: let osInvalidSocket* = winlean.INVALID_SOCKET @@ -106,7 +108,7 @@ proc toInt*(typ: TType): cint proc toInt*(p: TProtocol): cint ## Converts the TProtocol enum to a platform-dependent ``cint``. -when defined(posix): +when not useWinVersion: proc toInt(domain: TDomain): cint = case domain of AF_UNIX: result = posix.AF_UNIX @@ -150,7 +152,7 @@ proc newRawSocket*(domain: TDomain = AF_INET, typ: TType = SOCK_STREAM, proc close*(socket: TSocketHandle) = ## closes a socket. - when defined(windows): + when useWinVersion: discard winlean.closeSocket(socket) else: discard posix.close(socket) @@ -164,7 +166,7 @@ proc listen*(socket: TSocketHandle, backlog = SOMAXCONN): cint {.tags: [FReadIO] ## Marks ``socket`` as accepting connections. ## ``Backlog`` specifies the maximum length of the ## queue of pending connections. - when defined(windows): + when useWinVersion: result = winlean.listen(socket, cint(backlog)) else: result = posix.listen(socket, cint(backlog)) @@ -181,8 +183,8 @@ proc getAddrInfo*(address: string, port: TPort, af: TDomain = AF_INET, typ: TTyp hints.ai_protocol = toInt(prot) var gaiResult = getAddrInfo(address, $port, addr(hints), result) if gaiResult != 0'i32: - when defined(windows): - OSError(OSLastError()) + when useWinVersion: + osError(osLastError()) else: raise newException(EOS, $gai_strerror(gaiResult)) @@ -224,7 +226,7 @@ proc getServByName*(name, proto: string): TServent {.tags: [FReadIO].} = ## and the protocol name specified by ``proto`` matches the s_proto member. ## ## On posix this will search through the ``/etc/services`` file. - when defined(Windows): + when useWinVersion: var s = winlean.getservbyname(name, proto) else: var s = posix.getservbyname(name, proto) @@ -240,7 +242,7 @@ proc getServByPort*(port: TPort, proto: string): TServent {.tags: [FReadIO].} = ## protocol name specified by ``proto`` matches the s_proto member. ## ## On posix this will search through the ``/etc/services`` file. - when defined(Windows): + when useWinVersion: var s = winlean.getservbyport(ze(int16(port)).cint, proto) else: var s = posix.getservbyport(ze(int16(port)).cint, proto) @@ -255,7 +257,7 @@ proc getHostByAddr*(ip: string): Thostent {.tags: [FReadIO].} = var myaddr: TInAddr myaddr.s_addr = inet_addr(ip) - when defined(windows): + when useWinVersion: var s = winlean.gethostbyaddr(addr(myaddr), sizeof(myaddr).cuint, cint(rawsockets.AF_INET)) if s == nil: osError(osLastError()) @@ -267,7 +269,7 @@ proc getHostByAddr*(ip: string): Thostent {.tags: [FReadIO].} = result.name = $s.h_name result.aliases = cstringArrayToSeq(s.h_aliases) - when defined(windows): + when useWinVersion: result.addrtype = TDomain(s.h_addrtype) else: if s.h_addrtype == posix.AF_INET: @@ -281,14 +283,14 @@ proc getHostByAddr*(ip: string): Thostent {.tags: [FReadIO].} = proc getHostByName*(name: string): Thostent {.tags: [FReadIO].} = ## This function will lookup the IP address of a hostname. - when defined(Windows): + when useWinVersion: var s = winlean.gethostbyname(name) else: var s = posix.gethostbyname(name) if s == nil: osError(osLastError()) result.name = $s.h_name result.aliases = cstringArrayToSeq(s.h_aliases) - when defined(windows): + when useWinVersion: result.addrtype = TDomain(s.h_addrtype) else: if s.h_addrtype == posix.AF_INET: @@ -303,7 +305,7 @@ proc getHostByName*(name: string): Thostent {.tags: [FReadIO].} = proc getSockName*(socket: TSocketHandle): TPort = ## returns the socket's associated port number. var name: Tsockaddr_in - when defined(Windows): + when useWinVersion: name.sin_family = int16(ord(AF_INET)) else: name.sin_family = posix.AF_INET @@ -337,7 +339,7 @@ proc setBlocking*(s: TSocketHandle, blocking: bool) = ## Sets blocking mode on socket. ## ## Raises EOS on error. - when defined(Windows): + when useWinVersion: var mode = clong(ord(not blocking)) # 1 for non-blocking, 0 for blocking if ioctlsocket(s, FIONBIO, addr(mode)) == -1: osError(osLastError()) @@ -418,4 +420,4 @@ proc selectWrite*(writefds: var seq[TSocketHandle], when defined(Windows): var wsa: TWSADATA - if WSAStartup(0x0101'i16, addr wsa) != 0: OSError(OSLastError()) + if WSAStartup(0x0101'i16, addr wsa) != 0: osError(osLastError()) diff --git a/lib/system/sysio.nim b/lib/system/sysio.nim index 56e6a9e5f..02c17b92b 100644 --- a/lib/system/sysio.nim +++ b/lib/system/sysio.nim @@ -176,9 +176,10 @@ proc rawEchoNL() {.inline, compilerproc.} = write(stdout, "\n") # interface to the C procs: -when defined(windows) and not defined(useWinAnsi): +when (defined(windows) and not defined(useWinAnsi)) or defined(nimdoc): include "system/widestrs" - + +when defined(windows) and not defined(useWinAnsi): proc wfopen(filename, mode: WideCString): pointer {. importc: "_wfopen", nodecl.} proc wfreopen(filename, mode: WideCString, stream: TFile): TFile {. |