diff --git a/compiler/nimconf.nim b/compiler/nimconf.nim index 18bbe6cb4..fea22f86b 100755 --- a/compiler/nimconf.nim +++ b/compiler/nimconf.nim @@ -219,8 +219,8 @@ proc LoadConfigs*(cfg = "nimrod.cfg") = if libpath == "": # choose default libpath: var prefix = getPrefixDir() - if (prefix == "/usr"): libpath = "/usr/lib/nimrod" - elif (prefix == "/usr/local"): libpath = "/usr/local/lib/nimrod" + if prefix == "/usr": libpath = "/usr/lib/nimrod" + elif prefix == "/usr/local": libpath = "/usr/local/lib/nimrod" else: libpath = joinPath(prefix, "lib") if optSkipConfigFile notin gGlobalOptions: diff --git a/lib/pure/httpserver.nim b/lib/pure/httpserver.nim index b47af97fa..abe90e61c 100755 --- a/lib/pure/httpserver.nim +++ b/lib/pure/httpserver.nim @@ -144,10 +144,12 @@ proc executeCgi(client: TSocket, path, query: string, meth: TRequestMethod) = dealloc(buf) var outp = process.outputStream - while running(process) or not atEnd(outp): - var line = outp.readLine() - send(client, line.string) - send(client, wwwNL) + var line = newStringOfCap(120).TaintedString + while true: + if outp.readLine(line): + send(client, line.string) + send(client, wwwNL) + elif not running(process): break # --------------- Server Setup ----------------------------------------------- diff --git a/lib/pure/os.nim b/lib/pure/os.nim index 626fbc7eb..a8fafd5de 100755 --- a/lib/pure/os.nim +++ b/lib/pure/os.nim @@ -414,7 +414,7 @@ proc isRootDir*(path: string): bool {. var p = parentDir(path) result = p == path or p.len == 0 -iterator parentDirs*(path: string, fromRoot = false, inclusive = true): string = +iterator parentDirs*(path: string, fromRoot=false, inclusive=true): string = ## Walks over all parent directories of a given `path` ## ## If `fromRoot` is set, the traversal will start from the file system root diff --git a/lib/pure/osproc.nim b/lib/pure/osproc.nim index e01953e85..dc107b382 100755 --- a/lib/pure/osproc.nim +++ b/lib/pure/osproc.nim @@ -160,7 +160,7 @@ proc execProcesses*(cmds: openArray[string], ## that execute in parallel. The highest return value of all processes ## is returned. when defined(posix): - # poParentStreams causes problems on Posix, so we disable it simply: + # poParentStreams causes problems on Posix, so we simply disable it: var options = options - {poParentStreams} assert n > 0 @@ -218,12 +218,16 @@ when not defined(useNimRtl): var p = startCmd(command, options=options) var outp = outputStream(p) result = TaintedString"" - while running(p) or not atEnd(outp): - result.string.add(outp.readLine().string) - result.string.add("\n") + var line = newStringOfCap(120).TaintedString + while true: + if outp.readLine(line): + result.string.add(line.string) + result.string.add("\n") + elif not running(p): break close(outp) close(p) + when defined(Windows) and not defined(useNimRtl): # We need to implement a handle stream for Windows: type @@ -718,11 +722,14 @@ proc execCmdEx*(command: string, options: set[TProcessOption] = { var p = startCmd(command, options) var outp = outputStream(p) result = (TaintedString"", -1) + var line = newStringOfCap(120).TaintedString while true: - if result[1] == -1: result[1] = peekExitCode(p) - if result[1] != -1 and atEnd(outp): break - result[0].string.add(outp.readLine().string) - result[0].string.add("\n") + if outp.readLine(line): + result[0].string.add(line.string) + result[0].string.add("\n") + else: + result[1] = peekExitCode(p) + if result[1] != -1: break close(outp) close(p) diff --git a/lib/pure/streams.nim b/lib/pure/streams.nim index 3a254dc50..bef310d72 100755 --- a/lib/pure/streams.nim +++ b/lib/pure/streams.nim @@ -113,7 +113,7 @@ proc read[T](s: PStream, result: var T) = proc readChar*(s: PStream): char = ## reads a char from the stream `s`. Raises `EIO` if an error occured. ## Returns '\0' as an EOF marker. - discard readData(s, addr(result), sizeof(result)) + if readData(s, addr(result), sizeof(result)) != 1: result = '\0' proc readBool*(s: PStream): bool = ## reads a bool from the stream `s`. Raises `EIO` if an error occured. @@ -238,7 +238,9 @@ type proc fsClose(s: PStream) = close(PFileStream(s).f) proc fsFlush(s: PStream) = flushFile(PFileStream(s).f) +{.push warning[Deprecated]: off.} proc fsAtEnd(s: PStream): bool = return EndOfFile(PFileStream(s).f) +{.pop.} proc fsSetPosition(s: PStream, pos: int) = setFilePos(PFileStream(s).f, pos) proc fsGetPosition(s: PStream): int = return int(getFilePos(PFileStream(s).f)) diff --git a/lib/pure/unidecode/unidecode.nim b/lib/pure/unidecode/unidecode.nim index a302618e3..e184f16fa 100755 --- a/lib/pure/unidecode/unidecode.nim +++ b/lib/pure/unidecode/unidecode.nim @@ -46,7 +46,7 @@ proc loadUnidecodeTable*(datafile = "unidecode.dat") = newSeq(translationTable, 0xffff) var i = 0 for line in lines(datafile): - translationTable[i] = line + translationTable[i] = line.string inc(i) proc unidecode*(s: string): string = diff --git a/lib/system.nim b/lib/system.nim index 25a69a1bf..f9f5760e4 100755 --- a/lib/system.nim +++ b/lib/system.nim @@ -797,6 +797,8 @@ when taintMode: ## turned on. Use the ``-d:taintMode`` ## command line switch to turn the taint ## mode on. + + proc len*(s: TaintedString): int {.borrow.} else: type TaintedString* = string diff --git a/tests/reject/tdeprecated.nim b/tests/reject/tdeprecated.nim index 372fe155e..f41f0a72f 100755 --- a/tests/reject/tdeprecated.nim +++ b/tests/reject/tdeprecated.nim @@ -1,6 +1,6 @@ discard """ line: 9 - errmsg: "'a' is deprecated [Deprecated]" + errormsg: "'a' is deprecated [Deprecated]" """ var diff --git a/tests/tester.nim b/tests/tester.nim index 5f70b8f5b..d50b4f766 100755 --- a/tests/tester.nim +++ b/tests/tester.nim @@ -117,8 +117,8 @@ proc callCompiler(cmdTemplate, filename, options: string): TSpec = var outp = p.outputStream var suc = "" var err = "" - while running(p) or not atEnd(outp): - var x = outp.readLine().string + var x = newStringOfCap(120) + while outp.readLine(x.TaintedString) or running(p): if x =~ pegOfInterest: # `s` should contain the last error/warning message err = x diff --git a/todo.txt b/todo.txt index e4d47c4c5..4211b49de 100755 --- a/todo.txt +++ b/todo.txt @@ -1,6 +1,7 @@ version 0.8.14 ============== +- bug: compiler uses full file names again - stdlib and compiler should not use deprecated endOfFile and readline version 0.9.0 diff --git a/web/news.txt b/web/news.txt index 511591592..a783bb258 100755 --- a/web/news.txt +++ b/web/news.txt @@ -46,7 +46,7 @@ Changes affecting backwards compatibility raise hooks. - Changed exception handling/error reporting for ``os.removeFile`` and ``os.removeDir``. -- The algorithm for searching and loading configuration files have been changed +- The algorithm for searching and loading configuration files has been changed. - Operators now have diffent precedence rules: Assignment-like operators (like ``*=``) are now special-cased. - The fields in ``TStream`` have been renamed to have an ``Impl`` suffix