Fix a few more warnings

This commit is contained in:
def 2015-02-17 02:18:52 +01:00
commit e686ca2523
16 changed files with 131 additions and 129 deletions

View file

@ -630,13 +630,13 @@ proc callCCompiler*(projectfile: string) =
res = execWithEcho(cmds[i]) res = execWithEcho(cmds[i])
if res != 0: rawMessage(errExecutionOfProgramFailed, []) if res != 0: rawMessage(errExecutionOfProgramFailed, [])
elif optListCmd in gGlobalOptions or gVerbosity > 1: elif optListCmd in gGlobalOptions or gVerbosity > 1:
res = execProcesses(cmds, {poEchoCmd, poUseShell, poParentStreams}, res = execProcesses(cmds, {poEchoCmd, poUsePath, poParentStreams},
gNumberOfProcessors) gNumberOfProcessors)
elif gVerbosity == 1: elif gVerbosity == 1:
res = execProcesses(cmds, {poUseShell, poParentStreams}, res = execProcesses(cmds, {poUsePath, poParentStreams},
gNumberOfProcessors, prettyCb) gNumberOfProcessors, prettyCb)
else: else:
res = execProcesses(cmds, {poUseShell, poParentStreams}, res = execProcesses(cmds, {poUsePath, poParentStreams},
gNumberOfProcessors) gNumberOfProcessors)
if res != 0: if res != 0:
if gNumberOfProcessors <= 1: if gNumberOfProcessors <= 1:

View file

@ -462,7 +462,7 @@ proc matchUserTypeClass*(c: PContext, m: var TCandidate,
openScope(c) openScope(c)
inc c.inTypeClass inc c.inTypeClass
finally: defer:
dec c.inTypeClass dec c.inTypeClass
closeScope(c) closeScope(c)

View file

@ -19,7 +19,7 @@ proc readOutput(p: Process): string =
discard p.waitForExit discard p.waitForExit
proc opGorge*(cmd, input: string): string = proc opGorge*(cmd, input: string): string =
var p = startCmd(cmd) var p = startProcess(cmd, options={poEvalCommand})
if input.len != 0: if input.len != 0:
p.inputStream.write(input) p.inputStream.write(input)
p.inputStream.close() p.inputStream.close()

View file

@ -200,7 +200,7 @@ template schedule =
if minIdx >= 0: if minIdx >= 0:
p.actors[minIdx].i.send(t) p.actors[minIdx].i.send(t)
else: else:
raise newException(EDeadThread, "cannot send message; thread died") raise newException(DeadThreadError, "cannot send message; thread died")
proc spawn*[TIn, TOut](p: var TActorPool[TIn, TOut], input: TIn, proc spawn*[TIn, TOut](p: var TActorPool[TIn, TOut], input: TIn,
action: proc (input: TIn): TOut {.thread.} action: proc (input: TIn): TOut {.thread.}

View file

@ -35,7 +35,7 @@ type
offset: int64 offset: int64
when defined(windows): when defined(windows):
proc getDesiredAccess(mode: TFileMode): int32 = proc getDesiredAccess(mode: FileMode): int32 =
case mode case mode
of fmRead: of fmRead:
result = GENERIC_READ result = GENERIC_READ
@ -44,7 +44,7 @@ when defined(windows):
of fmReadWrite, fmReadWriteExisting: of fmReadWrite, fmReadWriteExisting:
result = GENERIC_READ or GENERIC_WRITE result = GENERIC_READ or GENERIC_WRITE
proc getCreationDisposition(mode: TFileMode, filename: string): int32 = proc getCreationDisposition(mode: FileMode, filename: string): int32 =
case mode case mode
of fmRead, fmReadWriteExisting: of fmRead, fmReadWriteExisting:
OPEN_EXISTING OPEN_EXISTING
@ -54,7 +54,7 @@ when defined(windows):
else: else:
CREATE_NEW CREATE_NEW
else: else:
proc getPosixFlags(mode: TFileMode): cint = proc getPosixFlags(mode: FileMode): cint =
case mode case mode
of fmRead: of fmRead:
result = O_RDONLY result = O_RDONLY
@ -74,7 +74,7 @@ proc getFileSize(f: AsyncFile): int64 =
var high: DWord var high: DWord
let low = getFileSize(f.fd.THandle, addr high) let low = getFileSize(f.fd.THandle, addr high)
if low == INVALID_FILE_SIZE: if low == INVALID_FILE_SIZE:
raiseOSError() raiseOSError(osLastError())
return (high shl 32) or low return (high shl 32) or low
proc openAsync*(filename: string, mode = fmRead): AsyncFile = proc openAsync*(filename: string, mode = fmRead): AsyncFile =
@ -95,7 +95,7 @@ proc openAsync*(filename: string, mode = fmRead): AsyncFile =
nil, creationDisposition, flags, 0).TAsyncFd nil, creationDisposition, flags, 0).TAsyncFd
if result.fd.THandle == INVALID_HANDLE_VALUE: if result.fd.THandle == INVALID_HANDLE_VALUE:
raiseOSError() raiseOSError(osLastError())
register(result.fd) register(result.fd)
@ -108,7 +108,7 @@ proc openAsync*(filename: string, mode = fmRead): AsyncFile =
let perm = S_IRUSR or S_IWUSR or S_IRGRP or S_IWGRP or S_IROTH let perm = S_IRUSR or S_IWUSR or S_IRGRP or S_IWGRP or S_IROTH
result.fd = open(filename, flags, perm).TAsyncFD result.fd = open(filename, flags, perm).TAsyncFD
if result.fd.cint == -1: if result.fd.cint == -1:
raiseOSError() raiseOSError(osLastError())
register(result.fd) register(result.fd)
@ -185,7 +185,7 @@ proc read*(f: AsyncFile, size: int): Future[string] =
if res < 0: if res < 0:
let lastError = osLastError() let lastError = osLastError()
if lastError.int32 != EAGAIN: if lastError.int32 != EAGAIN:
retFuture.fail(newException(EOS, osErrorMsg(lastError))) retFuture.fail(newException(OSError, osErrorMsg(lastError)))
else: else:
result = false # We still want this callback to be called. result = false # We still want this callback to be called.
elif res == 0: elif res == 0:
@ -227,7 +227,7 @@ proc setFilePos*(f: AsyncFile, pos: int64) =
when not defined(windows): when not defined(windows):
let ret = lseek(f.fd.cint, pos, SEEK_SET) let ret = lseek(f.fd.cint, pos, SEEK_SET)
if ret == -1: if ret == -1:
raiseOSError() raiseOSError(osLastError())
proc readAll*(f: AsyncFile): Future[string] {.async.} = proc readAll*(f: AsyncFile): Future[string] {.async.} =
## Reads all data from the specified file. ## Reads all data from the specified file.
@ -299,7 +299,7 @@ proc write*(f: AsyncFile, data: string): Future[void] =
if res < 0: if res < 0:
let lastError = osLastError() let lastError = osLastError()
if lastError.int32 != EAGAIN: if lastError.int32 != EAGAIN:
retFuture.fail(newException(EOS, osErrorMsg(lastError))) retFuture.fail(newException(OSError, osErrorMsg(lastError)))
else: else:
result = false # We still want this callback to be called. result = false # We still want this callback to be called.
else: else:
@ -318,8 +318,8 @@ proc close*(f: AsyncFile) =
## Closes the file specified. ## Closes the file specified.
when defined(windows): when defined(windows):
if not closeHandle(f.fd.THandle).bool: if not closeHandle(f.fd.THandle).bool:
raiseOSError() raiseOSError(osLastError())
else: else:
if close(f.fd.cint) == -1: if close(f.fd.cint) == -1:
raiseOSError() raiseOSError(osLastError())

View file

@ -149,7 +149,7 @@ proc createDir*(ftp: AsyncFtpClient, dir: string, recursive = false){.async.} =
assertReply reply, "257" assertReply reply, "257"
proc chmod*(ftp: AsyncFtpClient, path: string, proc chmod*(ftp: AsyncFtpClient, path: string,
permissions: set[TFilePermission]) {.async.} = permissions: set[FilePermission]) {.async.} =
## Changes permission of ``path`` to ``permissions``. ## Changes permission of ``path`` to ``permissions``.
var userOctal = 0 var userOctal = 0
var groupOctal = 0 var groupOctal = 0
@ -188,7 +188,7 @@ proc retrText*(ftp: AsyncFtpClient, file: string): Future[string] {.async.} =
result = await ftp.getLines() result = await ftp.getLines()
proc getFile(ftp: AsyncFtpClient, file: TFile, total: BiggestInt, proc getFile(ftp: AsyncFtpClient, file: File, total: BiggestInt,
onProgressChanged: ProgressChangedProc) {.async.} = onProgressChanged: ProgressChangedProc) {.async.} =
assert ftp.dsockConnected assert ftp.dsockConnected
var progress = 0 var progress = 0
@ -240,7 +240,7 @@ proc retrFile*(ftp: AsyncFtpClient, file, dest: string,
await getFile(ftp, destFile, fileSize, onProgressChanged) await getFile(ftp, destFile, fileSize, onProgressChanged)
proc doUpload(ftp: AsyncFtpClient, file: TFile, proc doUpload(ftp: AsyncFtpClient, file: File,
onProgressChanged: ProgressChangedProc) {.async.} = onProgressChanged: ProgressChangedProc) {.async.} =
assert ftp.dsockConnected assert ftp.dsockConnected

View file

@ -675,7 +675,7 @@ when isMainModule:
echo(data) echo(data)
echo("Finished reading! " & $no) echo("Finished reading! " & $no)
proc testAccept(s: AsyncSocket, disp: PDispatcher, no: int) = proc testAccept(s: AsyncSocket, disp: Dispatcher, no: int) =
echo("Accepting client! " & $no) echo("Accepting client! " & $no)
var client: AsyncSocket var client: AsyncSocket
new(client) new(client)
@ -691,7 +691,7 @@ when isMainModule:
var d = newDispatcher() var d = newDispatcher()
var s = asyncSocket() var s = asyncSocket()
s.connect("amber.tenthbit.net", TPort(6667)) s.connect("amber.tenthbit.net", Port(6667))
s.handleConnect = s.handleConnect =
proc (s: AsyncSocket) = proc (s: AsyncSocket) =
testConnect(s, 1) testConnect(s, 1)
@ -704,7 +704,7 @@ when isMainModule:
server.handleAccept = server.handleAccept =
proc (s: AsyncSocket) = proc (s: AsyncSocket) =
testAccept(s, d, 78) testAccept(s, d, 78)
server.bindAddr(TPort(5555)) server.bindAddr(Port(5555))
server.listen() server.listen()
d.register(server) d.register(server)

View file

@ -42,7 +42,7 @@ proc openDefaultBrowser*(url: string) =
for b in getEnv("BROWSER").string.split(PathSep): for b in getEnv("BROWSER").string.split(PathSep):
try: try:
# we use ``startProcess`` here because we don't want to block! # we use ``startProcess`` here because we don't want to block!
discard startProcess(command=b, args=[url], options={poUseShell}) discard startProcess(command=b, args=[url], options={poUsePath})
return return
except OSError: except OSError:
discard discard

View file

@ -29,7 +29,7 @@ type
FSMonitorObj = object of RootObj FSMonitorObj = object of RootObj
fd: cint fd: cint
handleEvent: proc (m: FSMonitor, ev: MonitorEvent) {.closure.} handleEvent: proc (m: FSMonitor, ev: MonitorEvent) {.closure.}
targets: TTable[cint, string] targets: Table[cint, string]
MonitorEventType* = enum ## Monitor event type MonitorEventType* = enum ## Monitor event type
MonitorAccess, ## File was accessed. MonitorAccess, ## File was accessed.
@ -64,7 +64,7 @@ type
const const
MaxEvents = 100 MaxEvents = 100
proc newMonitor*(): PFSMonitor = proc newMonitor*(): FSMonitor =
## Creates a new file system monitor. ## Creates a new file system monitor.
new(result) new(result)
result.targets = initTable[cint, string]() result.targets = initTable[cint, string]()
@ -72,7 +72,7 @@ proc newMonitor*(): PFSMonitor =
if result.fd < 0: if result.fd < 0:
raiseOSError(osLastError()) raiseOSError(osLastError())
proc add*(monitor: PFSMonitor, target: string, proc add*(monitor: FSMonitor, target: string,
filters = {MonitorAll}): cint {.discardable.} = filters = {MonitorAll}): cint {.discardable.} =
## Adds ``target`` which may be a directory or a file to the list of ## Adds ``target`` which may be a directory or a file to the list of
## watched paths of ``monitor``. ## watched paths of ``monitor``.
@ -99,14 +99,14 @@ proc add*(monitor: PFSMonitor, target: string,
raiseOSError(osLastError()) raiseOSError(osLastError())
monitor.targets.add(result, target) monitor.targets.add(result, target)
proc del*(monitor: PFSMonitor, wd: cint) = proc del*(monitor: FSMonitor, wd: cint) =
## Removes watched directory or file as specified by ``wd`` from ``monitor``. ## Removes watched directory or file as specified by ``wd`` from ``monitor``.
## ##
## If ``wd`` is not a part of ``monitor`` an EOS error is raised. ## If ``wd`` is not a part of ``monitor`` an EOS error is raised.
if inotifyRmWatch(monitor.fd, wd) < 0: if inotifyRmWatch(monitor.fd, wd) < 0:
raiseOSError(osLastError()) raiseOSError(osLastError())
proc getEvent(m: PFSMonitor, fd: cint): seq[TMonitorEvent] = proc getEvent(m: FSMonitor, fd: cint): seq[MonitorEvent] =
result = @[] result = @[]
let size = (sizeof(TINotifyEvent)+2000)*MaxEvents let size = (sizeof(TINotifyEvent)+2000)*MaxEvents
var buffer = newString(size) var buffer = newString(size)
@ -118,7 +118,7 @@ proc getEvent(m: PFSMonitor, fd: cint): seq[TMonitorEvent] =
var i = 0 var i = 0
while i < le: while i < le:
var event = cast[ptr TINotifyEvent](addr(buffer[i])) var event = cast[ptr TINotifyEvent](addr(buffer[i]))
var mev: TMonitorEvent var mev: MonitorEvent
mev.wd = event.wd mev.wd = event.wd
if event.len.int != 0: if event.len.int != 0:
let cstr = event.name.addr.cstring let cstr = event.name.addr.cstring
@ -137,7 +137,7 @@ proc getEvent(m: PFSMonitor, fd: cint): seq[TMonitorEvent] =
# Find the MovedFrom event. # Find the MovedFrom event.
mev.oldPath = movedFrom[event.cookie.cint].old mev.oldPath = movedFrom[event.cookie.cint].old
mev.newPath = "" # Set later mev.newPath = "" # Set later
# Delete it from the TTable # Delete it from the Table
movedFrom.del(event.cookie.cint) movedFrom.del(event.cookie.cint)
elif (event.mask.int and IN_ACCESS) != 0: mev.kind = MonitorAccess elif (event.mask.int and IN_ACCESS) != 0: mev.kind = MonitorAccess
elif (event.mask.int and IN_ATTRIB) != 0: mev.kind = MonitorAttrib elif (event.mask.int and IN_ATTRIB) != 0: mev.kind = MonitorAttrib
@ -164,26 +164,26 @@ proc getEvent(m: PFSMonitor, fd: cint): seq[TMonitorEvent] =
# If movedFrom events have not been matched with a moveTo. File has # If movedFrom events have not been matched with a moveTo. File has
# been moved to an unwatched location, emit a MonitorDelete. # been moved to an unwatched location, emit a MonitorDelete.
for cookie, t in pairs(movedFrom): for cookie, t in pairs(movedFrom):
var mev: TMonitorEvent var mev: MonitorEvent
mev.kind = MonitorDelete mev.kind = MonitorDelete
mev.wd = t.wd mev.wd = t.wd
mev.name = t.old mev.name = t.old
result.add(mev) result.add(mev)
proc FSMonitorRead(h: PObject) = proc FSMonitorRead(h: RootRef) =
var events = PFSMonitor(h).getEvent(PFSMonitor(h).fd) var events = FSMonitor(h).getEvent(FSMonitor(h).fd)
#var newEv: TMonitorEvent #var newEv: MonitorEvent
for ev in events: for ev in events:
var target = PFSMonitor(h).targets[ev.wd] var target = FSMonitor(h).targets[ev.wd]
var newEv = ev var newEv = ev
if newEv.kind == MonitorMoved: if newEv.kind == MonitorMoved:
newEv.oldPath = target / newEv.oldPath newEv.oldPath = target / newEv.oldPath
newEv.newPath = target / newEv.name newEv.newPath = target / newEv.name
else: else:
newEv.fullName = target / newEv.name newEv.fullName = target / newEv.name
PFSMonitor(h).handleEvent(PFSMonitor(h), newEv) FSMonitor(h).handleEvent(FSMonitor(h), newEv)
proc toDelegate(m: PFSMonitor): PDelegate = proc toDelegate(m: FSMonitor): Delegate =
result = newDelegate() result = newDelegate()
result.deleVal = m result.deleVal = m
result.fd = (type(result.fd))(m.fd) result.fd = (type(result.fd))(m.fd)
@ -191,8 +191,8 @@ proc toDelegate(m: PFSMonitor): PDelegate =
result.handleRead = FSMonitorRead result.handleRead = FSMonitorRead
result.open = true result.open = true
proc register*(d: PDispatcher, monitor: PFSMonitor, proc register*(d: Dispatcher, monitor: FSMonitor,
handleEvent: proc (m: PFSMonitor, ev: TMonitorEvent) {.closure.}) = handleEvent: proc (m: FSMonitor, ev: MonitorEvent) {.closure.}) =
## Registers ``monitor`` with dispatcher ``d``. ## Registers ``monitor`` with dispatcher ``d``.
monitor.handleEvent = handleEvent monitor.handleEvent = handleEvent
var deleg = toDelegate(monitor) var deleg = toDelegate(monitor)
@ -204,7 +204,7 @@ when isMainModule:
var monitor = newMonitor() var monitor = newMonitor()
echo monitor.add("/home/dom/inotifytests/") echo monitor.add("/home/dom/inotifytests/")
disp.register(monitor, disp.register(monitor,
proc (m: PFSMonitor, ev: TMonitorEvent) = proc (m: FSMonitor, ev: MonitorEvent) =
echo("Got event: ", ev.kind) echo("Got event: ", ev.kind)
if ev.kind == MonitorMoved: if ev.kind == MonitorMoved:
echo("From ", ev.oldPath, " to ", ev.newPath) echo("From ", ev.oldPath, " to ", ev.newPath)

View file

@ -107,7 +107,7 @@ type
EInvalidReply: ReplyError, EFTP: FTPError EInvalidReply: ReplyError, EFTP: FTPError
].} ].}
proc ftpClient*(address: string, port = TPort(21), proc ftpClient*(address: string, port = Port(21),
user, pass = ""): FtpClient = user, pass = ""): FtpClient =
## Create a ``FtpClient`` object. ## Create a ``FtpClient`` object.
new(result) new(result)
@ -120,10 +120,10 @@ proc ftpClient*(address: string, port = TPort(21),
result.csock = socket() result.csock = socket()
if result.csock == invalidSocket: raiseOSError(osLastError()) if result.csock == invalidSocket: raiseOSError(osLastError())
template blockingOperation(sock: TSocket, body: stmt) {.immediate.} = template blockingOperation(sock: Socket, body: stmt) {.immediate.} =
body body
template blockingOperation(sock: asyncio.PAsyncSocket, body: stmt) {.immediate.} = template blockingOperation(sock: asyncio.AsyncSocket, body: stmt) {.immediate.} =
sock.setBlocking(true) sock.setBlocking(true)
body body
sock.setBlocking(false) sock.setBlocking(false)
@ -145,14 +145,14 @@ proc send*[T](ftp: FtpBase[T], m: string): TaintedString =
proc assertReply(received: TaintedString, expected: string) = proc assertReply(received: TaintedString, expected: string) =
if not received.string.startsWith(expected): if not received.string.startsWith(expected):
raise newException(EInvalidReply, raise newException(ReplyError,
"Expected reply '$1' got: $2" % [ "Expected reply '$1' got: $2" % [
expected, received.string]) expected, received.string])
proc assertReply(received: TaintedString, expected: varargs[string]) = proc assertReply(received: TaintedString, expected: varargs[string]) =
for i in items(expected): for i in items(expected):
if received.string.startsWith(i): return if received.string.startsWith(i): return
raise newException(EInvalidReply, raise newException(ReplyError,
"Expected reply '$1' got: $2" % "Expected reply '$1' got: $2" %
[expected.join("' or '"), received.string]) [expected.join("' or '"), received.string])
@ -161,7 +161,7 @@ proc createJob[T](ftp: FtpBase[T],
nimcall,gcsafe.}, nimcall,gcsafe.},
cmd: FTPJobType) = cmd: FTPJobType) =
if ftp.jobInProgress: if ftp.jobInProgress:
raise newException(EFTP, "Unable to do two jobs at once.") raise newException(FTPError, "Unable to do two jobs at once.")
ftp.jobInProgress = true ftp.jobInProgress = true
new(ftp.job) new(ftp.job)
ftp.job.prc = prc ftp.job.prc = prc
@ -182,11 +182,11 @@ proc deleteJob[T](ftp: FtpBase[T]) =
ftp.job.file.close() ftp.job.file.close()
ftp.dsock.close() ftp.dsock.close()
proc handleTask(s: PAsyncSocket, ftp: PAsyncFTPClient) = proc handleTask(s: AsyncSocket, ftp: AsyncFTPClient) =
if ftp.jobInProgress: if ftp.jobInProgress:
if ftp.job.typ in {JRetr, JStore}: if ftp.job.typ in {JRetr, JStore}:
if epochTime() - ftp.job.lastProgressReport >= 1.0: if epochTime() - ftp.job.lastProgressReport >= 1.0:
var r: TFTPEvent var r: FTPEvent
ftp.job.lastProgressReport = epochTime() ftp.job.lastProgressReport = epochTime()
r.typ = EvTransferProgress r.typ = EvTransferProgress
r.bytesTotal = ftp.job.total r.bytesTotal = ftp.job.total
@ -195,22 +195,22 @@ proc handleTask(s: PAsyncSocket, ftp: PAsyncFTPClient) =
r.filename = ftp.job.filename r.filename = ftp.job.filename
r.currentJob = ftp.job.typ r.currentJob = ftp.job.typ
ftp.job.oneSecond = 0 ftp.job.oneSecond = 0
ftp.handleEvent(PAsyncFTPClient(ftp), r) ftp.handleEvent(ftp, r)
proc handleWrite(s: PAsyncSocket, ftp: PAsyncFTPClient) = proc handleWrite(s: AsyncSocket, ftp: AsyncFTPClient) =
if ftp.jobInProgress: if ftp.jobInProgress:
if ftp.job.typ == JStore: if ftp.job.typ == JStore:
assert (not ftp.job.prc(ftp, true)) assert (not ftp.job.prc(ftp, true))
proc handleConnect(s: PAsyncSocket, ftp: PAsyncFTPClient) = proc handleConnect(s: AsyncSocket, ftp: AsyncFTPClient) =
ftp.dsockConnected = true ftp.dsockConnected = true
assert(ftp.jobInProgress) assert(ftp.jobInProgress)
if ftp.job.typ == JStore: if ftp.job.typ == JStore:
s.setHandleWrite(proc (s: PAsyncSocket) = handleWrite(s, ftp)) s.setHandleWrite(proc (s: AsyncSocket) = handleWrite(s, ftp))
else: else:
s.delHandleWrite() s.delHandleWrite()
proc handleRead(s: PAsyncSocket, ftp: PAsyncFTPClient) = proc handleRead(s: AsyncSocket, ftp: AsyncFTPClient) =
assert ftp.jobInProgress assert ftp.jobInProgress
assert ftp.job.typ != JStore assert ftp.job.typ != JStore
# This can never return true, because it shouldn't check for code # This can never return true, because it shouldn't check for code
@ -219,19 +219,19 @@ proc handleRead(s: PAsyncSocket, ftp: PAsyncFTPClient) =
proc pasv[T](ftp: FtpBase[T]) = proc pasv[T](ftp: FtpBase[T]) =
## Negotiate a data connection. ## Negotiate a data connection.
when T is TSocket: when T is Socket:
ftp.dsock = socket() ftp.dsock = socket()
if ftp.dsock == invalidSocket: raiseOSError(osLastError()) if ftp.dsock == invalidSocket: raiseOSError(osLastError())
elif T is PAsyncSocket: elif T is AsyncSocket:
ftp.dsock = asyncSocket() ftp.dsock = asyncSocket()
ftp.dsock.handleRead = ftp.dsock.handleRead =
proc (s: PAsyncSocket) = proc (s: AsyncSocket) =
handleRead(s, ftp) handleRead(s, ftp)
ftp.dsock.handleConnect = ftp.dsock.handleConnect =
proc (s: PAsyncSocket) = proc (s: AsyncSocket) =
handleConnect(s, ftp) handleConnect(s, ftp)
ftp.dsock.handleTask = ftp.dsock.handleTask =
proc (s: PAsyncSocket) = proc (s: AsyncSocket) =
handleTask(s, ftp) handleTask(s, ftp)
ftp.disp.register(ftp.dsock) ftp.disp.register(ftp.dsock)
else: else:
@ -244,8 +244,8 @@ proc pasv[T](ftp: FtpBase[T]) =
var ip = nums[0.. -3] var ip = nums[0.. -3]
var port = nums[-2.. -1] var port = nums[-2.. -1]
var properPort = port[0].parseInt()*256+port[1].parseInt() var properPort = port[0].parseInt()*256+port[1].parseInt()
ftp.dsock.connect(ip.join("."), TPort(properPort.toU16)) ftp.dsock.connect(ip.join("."), Port(properPort.toU16))
when T is PAsyncSocket: when T is AsyncSocket:
ftp.dsockConnected = false ftp.dsockConnected = false
else: else:
ftp.dsockConnected = true ftp.dsockConnected = true
@ -255,10 +255,10 @@ proc normalizePathSep(path: string): string =
proc connect*[T](ftp: FtpBase[T]) = proc connect*[T](ftp: FtpBase[T]) =
## Connect to the FTP server specified by ``ftp``. ## Connect to the FTP server specified by ``ftp``.
when T is PAsyncSocket: when T is AsyncSocket:
blockingOperation(ftp.csock): blockingOperation(ftp.csock):
ftp.csock.connect(ftp.address, ftp.port) ftp.csock.connect(ftp.address, ftp.port)
elif T is TSocket: elif T is Socket:
ftp.csock.connect(ftp.address, ftp.port) ftp.csock.connect(ftp.address, ftp.port)
else: else:
{.fatal: "Incorrect socket instantiation".} {.fatal: "Incorrect socket instantiation".}
@ -292,13 +292,13 @@ proc getLines[T](ftp: FtpBase[T], async: bool = false): bool =
## It doesn't if `async` is true, because it doesn't check for 226 then. ## It doesn't if `async` is true, because it doesn't check for 226 then.
if ftp.dsockConnected: if ftp.dsockConnected:
var r = TaintedString"" var r = TaintedString""
when T is PAsyncSocket: when T is AsyncSocket:
if ftp.asyncDSock.readLine(r): if ftp.asyncDSock.readLine(r):
if r.string == "": if r.string == "":
ftp.dsockConnected = false ftp.dsockConnected = false
else: else:
ftp.job.lines.add(r.string & "\n") ftp.job.lines.add(r.string & "\n")
elif T is TSocket: elif T is Socket:
assert(not async) assert(not async)
ftp.dsock.readLine(r) ftp.dsock.readLine(r)
if r.string == "": if r.string == "":
@ -309,7 +309,7 @@ proc getLines[T](ftp: FtpBase[T], async: bool = false): bool =
{.fatal: "Incorrect socket instantiation".} {.fatal: "Incorrect socket instantiation".}
if not async: if not async:
var readSocks: seq[TSocket] = @[ftp.csock] var readSocks: seq[Socket] = @[ftp.csock]
# This is only needed here. Asyncio gets this socket... # This is only needed here. Asyncio gets this socket...
blockingOperation(ftp.csock): blockingOperation(ftp.csock):
if readSocks.select(1) != 0 and ftp.csock in readSocks: if readSocks.select(1) != 0 and ftp.csock in readSocks:
@ -372,7 +372,7 @@ proc createDir*[T](ftp: FtpBase[T], dir: string, recursive: bool = false) =
assertReply reply, "257" assertReply reply, "257"
proc chmod*[T](ftp: FtpBase[T], path: string, proc chmod*[T](ftp: FtpBase[T], path: string,
permissions: set[TFilePermission]) = permissions: set[FilePermission]) =
## Changes permission of ``path`` to ``permissions``. ## Changes permission of ``path`` to ``permissions``.
var userOctal = 0 var userOctal = 0
var groupOctal = 0 var groupOctal = 0
@ -431,8 +431,8 @@ proc getFile[T](ftp: FtpBase[T], async = false): bool =
var bytesRead = 0 var bytesRead = 0
var returned = false var returned = false
if async: if async:
when T is TSocket: when T is Socket:
raise newException(EFTP, "FTPClient must be async.") raise newException(FTPError, "FTPClient must be async.")
else: else:
bytesRead = ftp.dsock.recvAsync(r, BufferSize) bytesRead = ftp.dsock.recvAsync(r, BufferSize)
returned = bytesRead != -1 returned = bytesRead != -1
@ -447,9 +447,9 @@ proc getFile[T](ftp: FtpBase[T], async = false): bool =
elif returned and r2 == "": elif returned and r2 == "":
ftp.dsockConnected = false ftp.dsockConnected = false
when T is TSocket: when T is Socket:
if not async: if not async:
var readSocks: seq[TSocket] = @[ftp.csock] var readSocks: seq[Socket] = @[ftp.csock]
blockingOperation(ftp.csock): blockingOperation(ftp.csock):
if readSocks.select(1) != 0 and ftp.csock in readSocks: if readSocks.select(1) != 0 and ftp.csock in readSocks:
assertReply ftp.expectReply(), "226" assertReply ftp.expectReply(), "226"
@ -467,10 +467,10 @@ proc retrFile*[T](ftp: FtpBase[T], file, dest: string, async = false) =
var reply = ftp.send("RETR " & file.normalizePathSep) var reply = ftp.send("RETR " & file.normalizePathSep)
assertReply reply, ["125", "150"] assertReply reply, ["125", "150"]
if {'(', ')'} notin reply.string: if {'(', ')'} notin reply.string:
raise newException(EInvalidReply, "Reply has no file size.") raise newException(ReplyError, "Reply has no file size.")
var fileSize: BiggestInt var fileSize: BiggestInt
if reply.string.captureBetween('(', ')').parseBiggestInt(fileSize) == 0: if reply.string.captureBetween('(', ')').parseBiggestInt(fileSize) == 0:
raise newException(EInvalidReply, "Reply has no file size.") raise newException(ReplyError, "Reply has no file size.")
ftp.job.total = fileSize ftp.job.total = fileSize
ftp.job.lastProgressReport = epochTime() ftp.job.lastProgressReport = epochTime()
@ -545,10 +545,10 @@ proc close*[T](ftp: FtpBase[T]) =
ftp.csock.close() ftp.csock.close()
ftp.dsock.close() ftp.dsock.close()
proc csockHandleRead(s: PAsyncSocket, ftp: PAsyncFTPClient) = proc csockHandleRead(s: AsyncSocket, ftp: AsyncFTPClient) =
if ftp.jobInProgress: if ftp.jobInProgress:
assertReply ftp.expectReply(), "226" # Make sure the transfer completed. assertReply ftp.expectReply(), "226" # Make sure the transfer completed.
var r: TFTPEvent var r: FTPEvent
case ftp.job.typ case ftp.job.typ
of JRetrText: of JRetrText:
r.typ = EvLines r.typ = EvLines
@ -557,21 +557,21 @@ proc csockHandleRead(s: PAsyncSocket, ftp: PAsyncFTPClient) =
r.typ = EvRetr r.typ = EvRetr
r.filename = ftp.job.filename r.filename = ftp.job.filename
if ftp.job.progress != ftp.job.total: if ftp.job.progress != ftp.job.total:
raise newException(EFTP, "Didn't download full file.") raise newException(FTPError, "Didn't download full file.")
of JStore: of JStore:
r.typ = EvStore r.typ = EvStore
r.filename = ftp.job.filename r.filename = ftp.job.filename
if ftp.job.progress != ftp.job.total: if ftp.job.progress != ftp.job.total:
raise newException(EFTP, "Didn't upload full file.") raise newException(FTPError, "Didn't upload full file.")
ftp.deleteJob() ftp.deleteJob()
ftp.handleEvent(ftp, r) ftp.handleEvent(ftp, r)
proc asyncFTPClient*(address: string, port = TPort(21), proc asyncFTPClient*(address: string, port = Port(21),
user, pass = "", user, pass = "",
handleEvent: proc (ftp: PAsyncFTPClient, ev: TFTPEvent) {.closure,gcsafe.} = handleEvent: proc (ftp: AsyncFTPClient, ev: FTPEvent) {.closure,gcsafe.} =
(proc (ftp: PAsyncFTPClient, ev: TFTPEvent) = discard)): PAsyncFTPClient = (proc (ftp: AsyncFTPClient, ev: FTPEvent) = discard)): AsyncFTPClient =
## Create a ``PAsyncFTPClient`` object. ## Create a ``AsyncFTPClient`` object.
## ##
## Use this if you want to use asyncio's dispatcher. ## Use this if you want to use asyncio's dispatcher.
var dres: AsyncFtpClient var dres: AsyncFtpClient
@ -588,7 +588,7 @@ proc asyncFTPClient*(address: string, port = TPort(21),
csockHandleRead(s, dres) csockHandleRead(s, dres)
result = dres result = dres
proc register*(d: PDispatcher, ftp: PAsyncFTPClient): PDelegate {.discardable.} = proc register*(d: Dispatcher, ftp: AsyncFTPClient): Delegate {.discardable.} =
## Registers ``ftp`` with dispatcher ``d``. ## Registers ``ftp`` with dispatcher ``d``.
ftp.disp = d ftp.disp = d
return ftp.disp.register(ftp.csock) return ftp.disp.register(ftp.csock)

View file

@ -260,7 +260,7 @@ proc execProcesses*(cmds: openArray[string],
for i in 0..m-1: for i in 0..m-1:
if beforeRunEvent != nil: if beforeRunEvent != nil:
beforeRunEvent(i) beforeRunEvent(i)
q[i] = startCmd(cmds[i], options=options) q[i] = startProcess(cmds[i], options=options + {poEvalCommand})
when defined(noBusyWaiting): when defined(noBusyWaiting):
var r = 0 var r = 0
for i in m..high(cmds): for i in m..high(cmds):
@ -275,7 +275,7 @@ proc execProcesses*(cmds: openArray[string],
if q[r] != nil: close(q[r]) if q[r] != nil: close(q[r])
if beforeRunEvent != nil: if beforeRunEvent != nil:
beforeRunEvent(i) beforeRunEvent(i)
q[r] = startCmd(cmds[i], options=options) q[r] = startProcess(cmds[i], options=options + {poEvalCommand})
r = (r + 1) mod n r = (r + 1) mod n
else: else:
var i = m var i = m
@ -288,7 +288,7 @@ proc execProcesses*(cmds: openArray[string],
if q[r] != nil: close(q[r]) if q[r] != nil: close(q[r])
if beforeRunEvent != nil: if beforeRunEvent != nil:
beforeRunEvent(i) beforeRunEvent(i)
q[r] = startCmd(cmds[i], options=options) q[r] = startProcess(cmds[i], options=options + {poEvalCommand})
inc(i) inc(i)
if i > high(cmds): break if i > high(cmds): break
for j in 0..m-1: for j in 0..m-1:
@ -298,7 +298,7 @@ proc execProcesses*(cmds: openArray[string],
for i in 0..high(cmds): for i in 0..high(cmds):
if beforeRunEvent != nil: if beforeRunEvent != nil:
beforeRunEvent(i) beforeRunEvent(i)
var p = startCmd(cmds[i], options=options) var p = startProcess(cmds[i], options=options + {poEvalCommand})
result = max(waitForExit(p), result) result = max(waitForExit(p), result)
close(p) close(p)
@ -644,14 +644,14 @@ elif not defined(useNimRtl):
var pid: TPid var pid: TPid
var sysArgs = allocCStringArray(sysArgsRaw) var sysArgs = allocCStringArray(sysArgsRaw)
finally: deallocCStringArray(sysArgs) defer: deallocCStringArray(sysArgs)
var sysEnv = if env == nil: var sysEnv = if env == nil:
envToCStringArray() envToCStringArray()
else: else:
envToCStringArray(env) envToCStringArray(env)
finally: deallocCStringArray(sysEnv) defer: deallocCStringArray(sysEnv)
var data: TStartProcessData var data: TStartProcessData
data.sysCommand = sysCommand data.sysCommand = sysCommand
@ -748,7 +748,7 @@ elif not defined(useNimRtl):
if pipe(data.pErrorPipe) != 0: if pipe(data.pErrorPipe) != 0:
raiseOSError(osLastError()) raiseOSError(osLastError())
finally: defer:
discard close(data.pErrorPipe[readIdx]) discard close(data.pErrorPipe[readIdx])
var pid: TPid var pid: TPid
@ -956,7 +956,7 @@ proc execCmdEx*(command: string, options: set[ProcessOption] = {
exitCode: int] {.tags: [ExecIOEffect, ReadIOEffect], gcsafe.} = exitCode: int] {.tags: [ExecIOEffect, ReadIOEffect], gcsafe.} =
## a convenience proc that runs the `command`, grabs all its output and ## a convenience proc that runs the `command`, grabs all its output and
## exit code and returns both. ## exit code and returns both.
var p = startCmd(command, options) var p = startProcess(command, options=options + {poEvalCommand})
var outp = outputStream(p) var outp = outputStream(p)
result = (TaintedString"", -1) result = (TaintedString"", -1)
var line = newStringOfCap(120).TaintedString var line = newStringOfCap(120).TaintedString

View file

@ -353,11 +353,11 @@ when isMainModule:
proc `%`(formatstr: string, a: openarray[string]): string = proc `%`(formatstr: string, a: openarray[string]): string =
result = newStringOfCap(formatstr.len + a.len shl 4) result = newStringOfCap(formatstr.len + a.len shl 4)
addf(result, formatstr.TSubex, a) addf(result, formatstr.Subex, a)
proc `%`(formatstr: string, a: string): string = proc `%`(formatstr: string, a: string): string =
result = newStringOfCap(formatstr.len + a.len) result = newStringOfCap(formatstr.len + a.len)
addf(result, formatstr.TSubex, [a]) addf(result, formatstr.Subex, [a])
doAssert "$# $3 $# $#" % ["a", "b", "c"] == "a c b c" doAssert "$# $3 $# $#" % ["a", "b", "c"] == "a c b c"

View file

@ -20,6 +20,7 @@ type
{.deprecated: [TUrl: Url, TUri: Uri].} {.deprecated: [TUrl: Url, TUri: Uri].}
{.push warning[deprecated]: off.}
proc `$`*(url: Url): string {.deprecated.} = proc `$`*(url: Url): string {.deprecated.} =
## **Deprecated since 0.9.6**: Use ``Uri`` instead. ## **Deprecated since 0.9.6**: Use ``Uri`` instead.
return string(url) return string(url)
@ -44,6 +45,7 @@ proc add*(url: var Url, a: Url) {.deprecated.} =
## ##
## **Deprecated since 0.9.6**: Use ``Uri`` instead. ## **Deprecated since 0.9.6**: Use ``Uri`` instead.
url = url / a url = url / a
{.pop.}
proc parseAuthority(authority: string, result: var Uri) = proc parseAuthority(authority: string, result: var Uri) =
var i = 0 var i = 0

View file

@ -64,7 +64,7 @@ proc node_move*(n: ptr TNode, oldlist: ptr TList, newlist: ptr TList){.
cdecl, importc: "node_move", dynlib: clarodll.} cdecl, importc: "node_move", dynlib: clarodll.}
type type
TClaroObj*{.pure.} = object TClaroObj*{.pure, inheritable.} = object
typ*: array[0..64 - 1, char] typ*: array[0..64 - 1, char]
destroy_pending*: cint destroy_pending*: cint
event_handlers*: TList event_handlers*: TList
@ -86,7 +86,7 @@ type
TEventHandler*{.pure.} = object TEventHandler*{.pure.} = object
typ*: array[0..32 - 1, char] typ*: array[0..32 - 1, char]
data*: pointer data*: pointer
func*: TEventFunc # the function that handles this event fun*: TEventFunc # the function that handles this event
# #define event_handler(n) void n ( TClaroObj *object, event_t *event ) # #define event_handler(n) void n ( TClaroObj *object, event_t *event )
@ -121,10 +121,10 @@ proc object_set_parent*(obj: ptr TClaroObj, parent: ptr TClaroObj){.cdecl,
# event functions # event functions
proc object_addhandler*(obj: ptr TClaroObj, event: cstring, proc object_addhandler*(obj: ptr TClaroObj, event: cstring,
func: TEventFunc){.cdecl, fun: TEventFunc){.cdecl,
importc: "object_addhandler", dynlib: clarodll.} importc: "object_addhandler", dynlib: clarodll.}
proc object_addhandler_interface*(obj: ptr TClaroObj, event: cstring, proc object_addhandler_interface*(obj: ptr TClaroObj, event: cstring,
func: TEventFunc, data: pointer){.cdecl, fun: TEventFunc, data: pointer){.cdecl,
importc: "object_addhandler_interface", dynlib: clarodll.} importc: "object_addhandler_interface", dynlib: clarodll.}
proc event_send*(obj: ptr TClaroObj, event: cstring, fmt: cstring): cint{. proc event_send*(obj: ptr TClaroObj, event: cstring, fmt: cstring): cint{.
varargs, cdecl, importc: "event_send", dynlib: clarodll.} varargs, cdecl, importc: "event_send", dynlib: clarodll.}
@ -258,7 +258,7 @@ proc image_load_inline_png*(parent: ptr TClaroObj, data: cstring,
## len size of data ## len size of data
when true: when true:
nil discard
else: else:
# status icons are not supported on all platforms yet: # status icons are not supported on all platforms yet:
type type
@ -682,7 +682,7 @@ const
type type
TCanvas*{.pure.} = object of TWidget TCanvas*{.pure.} = object of TWidget
surface*: cairo.PSurface surface*: cairo.PSurface
cr*: Cairo.PContext cr*: cairo.PContext
surfdata*: pointer surfdata*: pointer
fontdata*: pointer fontdata*: pointer
font_height*: cint font_height*: cint
@ -854,7 +854,7 @@ proc canvas_cairo_buffered_text_display_count*(widget: ptr TCanvas,
text: cstring, width: cint): cint{.cdecl, text: cstring, width: cint): cint{.cdecl,
importc: "canvas_cairo_buffered_text_display_count", importc: "canvas_cairo_buffered_text_display_count",
dynlib: clarodll.} dynlib: clarodll.}
proc canvas_get_cairo_context*(widget: ptr TCanvas): Cairo.PContext {.cdecl, proc canvas_get_cairo_context*(widget: ptr TCanvas): cairo.PContext {.cdecl,
importc: "canvas_get_cairo_context", dynlib: clarodll.} importc: "canvas_get_cairo_context", dynlib: clarodll.}
type type

View file

@ -30,9 +30,9 @@ type
CheckProc* = proc (handle: PCheck, status: cint) {.cdecl.} CheckProc* = proc (handle: PCheck, status: cint) {.cdecl.}
IdleProc* = proc (handle: PIdle, status: cint) {.cdecl.} IdleProc* = proc (handle: PIdle, status: cint) {.cdecl.}
PSockAddr* = ptr TSockAddr PSockAddr* = ptr SockAddr
GetAddrInfoProc* = proc (handle: PGetAddrInfo, status: cint, res: ptr TAddrInfo) GetAddrInfoProc* = proc (handle: PGetAddrInfo, status: cint, res: ptr AddrInfo)
ExitProc* = proc (a2: PProcess, exit_status: cint, term_signal: cint) ExitProc* = proc (a2: PProcess, exit_status: cint, term_signal: cint)
FsProc* = proc (req: PFS) FsProc* = proc (req: PFS)
@ -210,7 +210,7 @@ type
cunsigned = int cunsigned = int
UdpSendProc* = proc (req: PUdpSend, status: cint) UdpSendProc* = proc (req: PUdpSend, status: cint)
UdpRecvProc* = proc (handle: PUdp, nread: cssize, buf: TBuf, adr: ptr TSockAddr, flags: cunsigned) UdpRecvProc* = proc (handle: PUdp, nread: cssize, buf: TBuf, adr: ptr SockAddr, flags: cunsigned)
TUdp* {.pure, final, importc: "uv_udp_t", header: "uv.h".} = object TUdp* {.pure, final, importc: "uv_udp_t", header: "uv.h".} = object
loop* {.importc: "loop".}: PLoop loop* {.importc: "loop".}: PLoop
@ -366,7 +366,7 @@ type
tcp_port* {.importc: "tcp_port".}: TPort tcp_port* {.importc: "tcp_port".}: TPort
socket_send_buffer_size* {.importc: "socket_send_buffer_size".}: int socket_send_buffer_size* {.importc: "socket_send_buffer_size".}: int
socket_recv_buffer_size* {.importc: "socket_receive_buffer_size".}: int socket_recv_buffer_size* {.importc: "socket_receive_buffer_size".}: int
servers* {.importc: "servers".}: ptr TInAddr servers* {.importc: "servers".}: ptr InAddr
nservers* {.importc: "nservers".}: int nservers* {.importc: "nservers".}: int
domains* {.importc: "domains".}: ptr cstring domains* {.importc: "domains".}: ptr cstring
ndomains* {.importc: "ndomains".}: int ndomains* {.importc: "ndomains".}: int
@ -450,19 +450,19 @@ proc write*(req: PWrite, handle: PStream, bufs: ptr TBuf, bufcnt: cint, send_han
proc tcp_init*(a2: PLoop, handle: PTcp): cint{. proc tcp_init*(a2: PLoop, handle: PTcp): cint{.
importc: "uv_tcp_init", header: "uv.h".} importc: "uv_tcp_init", header: "uv.h".}
proc tcp_bind*(handle: PTcp, a3: TSockAddrIn): cint{. proc tcp_bind*(handle: PTcp, a3: SockAddrIn): cint{.
importc: "uv_tcp_bind", header: "uv.h".} importc: "uv_tcp_bind", header: "uv.h".}
proc tcp_bind6*(handle: PTcp, a3: TSockAddrIn6): cint{. proc tcp_bind6*(handle: PTcp, a3: TSockAddrIn6): cint{.
importc: "uv_tcp_bind6", header: "uv.h".} importc: "uv_tcp_bind6", header: "uv.h".}
proc tcp_getsockname*(handle: PTcp, name: ptr TSockAddr, namelen: var cint): cint{. proc tcp_getsockname*(handle: PTcp, name: ptr SockAddr, namelen: var cint): cint{.
importc: "uv_tcp_getsockname", header: "uv.h".} importc: "uv_tcp_getsockname", header: "uv.h".}
proc tcp_getpeername*(handle: PTcp, name: ptr TSockAddr, namelen: var cint): cint{. proc tcp_getpeername*(handle: PTcp, name: ptr SockAddr, namelen: var cint): cint{.
importc: "uv_tcp_getpeername", header: "uv.h".} importc: "uv_tcp_getpeername", header: "uv.h".}
proc tcp_connect*(req: PConnect, handle: PTcp, address: TSockAddrIn, cb: ConnectProc): cint{. proc tcp_connect*(req: PConnect, handle: PTcp, address: SockAddrIn, cb: ConnectProc): cint{.
importc: "uv_tcp_connect", header: "uv.h".} importc: "uv_tcp_connect", header: "uv.h".}
proc tcp_connect6*(req: PConnect, handle: PTcp, address: TSockAddrIn6, cb: ConnectProc): cint{. proc tcp_connect6*(req: PConnect, handle: PTcp, address: TSockAddrIn6, cb: ConnectProc): cint{.
@ -471,16 +471,16 @@ proc tcp_connect6*(req: PConnect, handle: PTcp, address: TSockAddrIn6, cb: Conne
proc udp_init*(a2: PLoop, handle: PUdp): cint{. proc udp_init*(a2: PLoop, handle: PUdp): cint{.
importc: "uv_udp_init", header: "uv.h".} importc: "uv_udp_init", header: "uv.h".}
proc udp_bind*(handle: PUdp, adr: TSockAddrIn, flags: cunsigned): cint{. proc udp_bind*(handle: PUdp, adr: SockAddrIn, flags: cunsigned): cint{.
importc: "uv_udp_bind", header: "uv.h".} importc: "uv_udp_bind", header: "uv.h".}
proc udp_bind6*(handle: PUdp, adr: TSockAddrIn6, flags: cunsigned): cint{. proc udp_bind6*(handle: PUdp, adr: TSockAddrIn6, flags: cunsigned): cint{.
importc: "uv_udp_bind6", header: "uv.h".} importc: "uv_udp_bind6", header: "uv.h".}
proc udp_getsockname*(handle: PUdp, name: ptr TSockAddr, namelen: var cint): cint{. proc udp_getsockname*(handle: PUdp, name: ptr SockAddr, namelen: var cint): cint{.
importc: "uv_udp_getsockname", header: "uv.h".} importc: "uv_udp_getsockname", header: "uv.h".}
proc udp_send*(req: PUdpSend, handle: PUdp, bufs: ptr TBuf, bufcnt: cint, adr: TSockAddrIn, send_cb: UdpSendProc): cint{. proc udp_send*(req: PUdpSend, handle: PUdp, bufs: ptr TBuf, bufcnt: cint, adr: SockAddrIn, send_cb: UdpSendProc): cint{.
importc: "uv_udp_send", header: "uv.h".} importc: "uv_udp_send", header: "uv.h".}
proc udp_send6*(req: PUdpSend, handle: PUdp, bufs: ptr TBuf, bufcnt: cint, adr: TSockAddrIn6, send_cb: UdpSendProc): cint{. proc udp_send6*(req: PUdpSend, handle: PUdp, bufs: ptr TBuf, bufcnt: cint, adr: TSockAddrIn6, send_cb: UdpSendProc): cint{.
@ -492,7 +492,7 @@ proc udp_recv_start*(handle: PUdp, alloc_cb: AllocProc, recv_cb: UdpRecvProc): c
proc udp_recv_stop*(handle: PUdp): cint{. proc udp_recv_stop*(handle: PUdp): cint{.
importc: "uv_udp_recv_stop", header: "uv.h".} importc: "uv_udp_recv_stop", header: "uv.h".}
proc tty_init*(a2: PLoop, a3: pTTy, fd: TFile): cint{. proc tty_init*(a2: PLoop, a3: pTTy, fd: File): cint{.
importc: "uv_tty_init", header: "uv.h".} importc: "uv_tty_init", header: "uv.h".}
proc tty_set_mode*(a2: pTTy, mode: cint): cint{. proc tty_set_mode*(a2: pTTy, mode: cint): cint{.
@ -504,13 +504,13 @@ proc tty_get_winsize*(a2: pTTy, width: var cint, height: var cint): cint{.
proc tty_reset_mode*() {. proc tty_reset_mode*() {.
importc: "uv_tty_reset_mode", header: "uv.h".} importc: "uv_tty_reset_mode", header: "uv.h".}
proc guess_handle*(file: TFile): THandleType{. proc guess_handle*(file: File): THandleType{.
importc: "uv_guess_handle", header: "uv.h".} importc: "uv_guess_handle", header: "uv.h".}
proc pipe_init*(a2: PLoop, handle: PPipe, ipc: int): cint{. proc pipe_init*(a2: PLoop, handle: PPipe, ipc: int): cint{.
importc: "uv_pipe_init", header: "uv.h".} importc: "uv_pipe_init", header: "uv.h".}
proc pipe_open*(a2: PPipe, file: TFile){. proc pipe_open*(a2: PPipe, file: File){.
importc: "uv_pipe_open", header: "uv.h".} importc: "uv_pipe_open", header: "uv.h".}
proc pipe_bind*(handle: PPipe, name: cstring): cint{. proc pipe_bind*(handle: PPipe, name: cstring): cint{.
@ -576,10 +576,10 @@ proc ares_init_options*(a2: PLoop, channel: PAresChannel, options: PAresOptions,
proc ares_destroy*(a2: PLoop, channel: PAresChannel){. proc ares_destroy*(a2: PLoop, channel: PAresChannel){.
importc: "uv_ares_destroy", header: "uv.h".} importc: "uv_ares_destroy", header: "uv.h".}
proc getaddrinfo*(a2: PLoop, handle: PGetAddrInfo,getaddrinfo_cb: GetAddrInfoProc, node: cstring, service: cstring, hints: ptr TAddrInfo): cint{. proc getaddrinfo*(a2: PLoop, handle: PGetAddrInfo,getaddrinfo_cb: GetAddrInfoProc, node: cstring, service: cstring, hints: ptr AddrInfo): cint{.
importc: "uv_getaddrinfo", header: "uv.h".} importc: "uv_getaddrinfo", header: "uv.h".}
proc freeaddrinfo*(ai: ptr TAddrInfo){. proc freeaddrinfo*(ai: ptr AddrInfo){.
importc: "uv_freeaddrinfo", header: "uv.h".} importc: "uv_freeaddrinfo", header: "uv.h".}
proc spawn*(a2: PLoop, a3: PProcess, options: TProcessOptions): cint{. proc spawn*(a2: PLoop, a3: PProcess, options: TProcessOptions): cint{.
@ -594,19 +594,19 @@ proc queue_work*(loop: PLoop, req: PWork, work_cb: WorkProc, after_work_cb: Afte
proc req_cleanup*(req: PFS){. proc req_cleanup*(req: PFS){.
importc: "uv_fs_req_cleanup", header: "uv.h".} importc: "uv_fs_req_cleanup", header: "uv.h".}
proc close*(loop: PLoop, req: PFS, file: TFile, cb: FsProc): cint{. proc close*(loop: PLoop, req: PFS, file: File, cb: FsProc): cint{.
importc: "uv_fs_close", header: "uv.h".} importc: "uv_fs_close", header: "uv.h".}
proc open*(loop: PLoop, req: PFS, path: cstring, flags: cint, mode: cint, cb: FsProc): cint{. proc open*(loop: PLoop, req: PFS, path: cstring, flags: cint, mode: cint, cb: FsProc): cint{.
importc: "uv_fs_open", header: "uv.h".} importc: "uv_fs_open", header: "uv.h".}
proc read*(loop: PLoop, req: PFS, file: TFile, buf: pointer, length: csize, offset: coff, cb: FsProc): cint{. proc read*(loop: PLoop, req: PFS, file: File, buf: pointer, length: csize, offset: coff, cb: FsProc): cint{.
importc: "uv_fs_read", header: "uv.h".} importc: "uv_fs_read", header: "uv.h".}
proc unlink*(loop: PLoop, req: PFS, path: cstring, cb: FsProc): cint{. proc unlink*(loop: PLoop, req: PFS, path: cstring, cb: FsProc): cint{.
importc: "uv_fs_unlink", header: "uv.h".} importc: "uv_fs_unlink", header: "uv.h".}
proc write*(loop: PLoop, req: PFS, file: TFile, buf: pointer, length: csize, offset: coff, cb: FsProc): cint{. proc write*(loop: PLoop, req: PFS, file: File, buf: pointer, length: csize, offset: coff, cb: FsProc): cint{.
importc: "uv_fs_write", header: "uv.h".} importc: "uv_fs_write", header: "uv.h".}
proc mkdir*(loop: PLoop, req: PFS, path: cstring, mode: cint, cb: FsProc): cint{. proc mkdir*(loop: PLoop, req: PFS, path: cstring, mode: cint, cb: FsProc): cint{.
@ -621,22 +621,22 @@ proc readdir*(loop: PLoop, req: PFS, path: cstring, flags: cint, cb: FsProc): ci
proc stat*(loop: PLoop, req: PFS, path: cstring, cb: FsProc): cint{. proc stat*(loop: PLoop, req: PFS, path: cstring, cb: FsProc): cint{.
importc: "uv_fs_stat", header: "uv.h".} importc: "uv_fs_stat", header: "uv.h".}
proc fstat*(loop: PLoop, req: PFS, file: TFile, cb: FsProc): cint{. proc fstat*(loop: PLoop, req: PFS, file: File, cb: FsProc): cint{.
importc: "uv_fs_fstat", header: "uv.h".} importc: "uv_fs_fstat", header: "uv.h".}
proc rename*(loop: PLoop, req: PFS, path: cstring, new_path: cstring, cb: FsProc): cint{. proc rename*(loop: PLoop, req: PFS, path: cstring, new_path: cstring, cb: FsProc): cint{.
importc: "uv_fs_rename", header: "uv.h".} importc: "uv_fs_rename", header: "uv.h".}
proc fsync*(loop: PLoop, req: PFS, file: TFile, cb: FsProc): cint{. proc fsync*(loop: PLoop, req: PFS, file: File, cb: FsProc): cint{.
importc: "uv_fs_fsync", header: "uv.h".} importc: "uv_fs_fsync", header: "uv.h".}
proc fdatasync*(loop: PLoop, req: PFS, file: TFile, cb: FsProc): cint{. proc fdatasync*(loop: PLoop, req: PFS, file: File, cb: FsProc): cint{.
importc: "uv_fs_fdatasync", header: "uv.h".} importc: "uv_fs_fdatasync", header: "uv.h".}
proc ftruncate*(loop: PLoop, req: PFS, file: TFile, offset: coff, cb: FsProc): cint{. proc ftruncate*(loop: PLoop, req: PFS, file: File, offset: coff, cb: FsProc): cint{.
importc: "uv_fs_ftruncate", header: "uv.h".} importc: "uv_fs_ftruncate", header: "uv.h".}
proc sendfile*(loop: PLoop, req: PFS, out_fd: TFile, in_fd: TFile, in_offset: coff, length: csize, cb: FsProc): cint{. proc sendfile*(loop: PLoop, req: PFS, out_fd: File, in_fd: File, in_offset: coff, length: csize, cb: FsProc): cint{.
importc: "uv_fs_sendfile", header: "uv.h".} importc: "uv_fs_sendfile", header: "uv.h".}
proc chmod*(loop: PLoop, req: PFS, path: cstring, mode: cint, cb: FsProc): cint{. proc chmod*(loop: PLoop, req: PFS, path: cstring, mode: cint, cb: FsProc): cint{.
@ -645,7 +645,7 @@ proc chmod*(loop: PLoop, req: PFS, path: cstring, mode: cint, cb: FsProc): cint{
proc utime*(loop: PLoop, req: PFS, path: cstring, atime: cdouble, mtime: cdouble, cb: FsProc): cint{. proc utime*(loop: PLoop, req: PFS, path: cstring, atime: cdouble, mtime: cdouble, cb: FsProc): cint{.
importc: "uv_fs_utime", header: "uv.h".} importc: "uv_fs_utime", header: "uv.h".}
proc futime*(loop: PLoop, req: PFS, file: TFile, atime: cdouble, mtime: cdouble, cb: FsProc): cint{. proc futime*(loop: PLoop, req: PFS, file: File, atime: cdouble, mtime: cdouble, cb: FsProc): cint{.
importc: "uv_fs_futime", header: "uv.h".} importc: "uv_fs_futime", header: "uv.h".}
proc lstat*(loop: PLoop, req: PFS, path: cstring, cb: FsProc): cint{. proc lstat*(loop: PLoop, req: PFS, path: cstring, cb: FsProc): cint{.
@ -660,25 +660,25 @@ proc symlink*(loop: PLoop, req: PFS, path: cstring, new_path: cstring, flags: ci
proc readlink*(loop: PLoop, req: PFS, path: cstring, cb: FsProc): cint{. proc readlink*(loop: PLoop, req: PFS, path: cstring, cb: FsProc): cint{.
importc: "uv_fs_readlink", header: "uv.h".} importc: "uv_fs_readlink", header: "uv.h".}
proc fchmod*(loop: PLoop, req: PFS, file: TFile, mode: cint, cb: FsProc): cint{. proc fchmod*(loop: PLoop, req: PFS, file: File, mode: cint, cb: FsProc): cint{.
importc: "uv_fs_fchmod", header: "uv.h".} importc: "uv_fs_fchmod", header: "uv.h".}
proc chown*(loop: PLoop, req: PFS, path: cstring, uid: cint, gid: cint, cb: FsProc): cint{. proc chown*(loop: PLoop, req: PFS, path: cstring, uid: cint, gid: cint, cb: FsProc): cint{.
importc: "uv_fs_chown", header: "uv.h".} importc: "uv_fs_chown", header: "uv.h".}
proc fchown*(loop: PLoop, req: PFS, file: TFile, uid: cint, gid: cint, cb: FsProc): cint{. proc fchown*(loop: PLoop, req: PFS, file: File, uid: cint, gid: cint, cb: FsProc): cint{.
importc: "uv_fs_fchown", header: "uv.h".} importc: "uv_fs_fchown", header: "uv.h".}
proc event_init*(loop: PLoop, handle: PFSEvent, filename: cstring, cb: FsEventProc): cint{. proc event_init*(loop: PLoop, handle: PFSEvent, filename: cstring, cb: FsEventProc): cint{.
importc: "uv_fs_event_init", header: "uv.h".} importc: "uv_fs_event_init", header: "uv.h".}
proc ip4_addr*(ip: cstring, port: cint): TSockAddrIn{. proc ip4_addr*(ip: cstring, port: cint): SockAddrIn{.
importc: "uv_ip4_addr", header: "uv.h".} importc: "uv_ip4_addr", header: "uv.h".}
proc ip6_addr*(ip: cstring, port: cint): TSockAddrIn6{. proc ip6_addr*(ip: cstring, port: cint): TSockAddrIn6{.
importc: "uv_ip6_addr", header: "uv.h".} importc: "uv_ip6_addr", header: "uv.h".}
proc ip4_name*(src: ptr TSockAddrIn, dst: cstring, size: csize): cint{. proc ip4_name*(src: ptr SockAddrIn, dst: cstring, size: csize): cint{.
importc: "uv_ip4_name", header: "uv.h".} importc: "uv_ip4_name", header: "uv.h".}
proc ip6_name*(src: ptr TSockAddrIn6, dst: cstring, size: csize): cint{. proc ip6_name*(src: ptr TSockAddrIn6, dst: cstring, size: csize): cint{.

View file

@ -232,7 +232,7 @@ proc uncompress*(sourceBuf: cstring, sourceLen: int): string =
return return
# Make sure memory allocated by inflateInit2() is freed eventually. # Make sure memory allocated by inflateInit2() is freed eventually.
finally: discard inflateEnd(z) defer: discard inflateEnd(z)
# Decompress all of self. # Decompress all of self.
while true: while true: