summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-x[-rw-r--r--]lib/devel/httpclient.nim0
-rwxr-xr-x[-rw-r--r--]lib/devel/parseurl.nim0
-rwxr-xr-xlib/impure/db_postgres.nim28
-rwxr-xr-xlib/system/excpt.nim6
-rwxr-xr-xlib/system/sysio.nim5
-rwxr-xr-xweb/community.txt2
-rwxr-xr-xweb/news.txt4
-rwxr-xr-xweb/question.txt33
8 files changed, 29 insertions, 49 deletions
diff --git a/lib/devel/httpclient.nim b/lib/devel/httpclient.nim
index abea34ea6..abea34ea6 100644..100755
--- a/lib/devel/httpclient.nim
+++ b/lib/devel/httpclient.nim
diff --git a/lib/devel/parseurl.nim b/lib/devel/parseurl.nim
index 769d07561..769d07561 100644..100755
--- a/lib/devel/parseurl.nim
+++ b/lib/devel/parseurl.nim
diff --git a/lib/impure/db_postgres.nim b/lib/impure/db_postgres.nim
index 25a04ed8e..cac5420d4 100755
--- a/lib/impure/db_postgres.nim
+++ b/lib/impure/db_postgres.nim
@@ -21,7 +21,7 @@ proc dbError(db: TDbConn) {.noreturn.} =
   ## raises an EDb exception.
   var e: ref EDb
   new(e)
-  e.msg = PQerrorMessage(db)
+  e.msg = $PQerrorMessage(db)
   raise e
 
 proc dbError*(msg: string) {.noreturn.} = 
@@ -31,17 +31,9 @@ proc dbError*(msg: string) {.noreturn.} =
   e.msg = msg
   raise e
 
-when false:
-  proc dbQueryOpt*(db: TDbConn, query: string, args: openarray[string]) =
-    var stmt = mysql_stmt_init(db)
-    if stmt == nil: dbError(db)
-    if mysql_stmt_prepare(stmt, query, len(query)) != 0: 
-      dbError(db)
-    var 
-      bindings: seq[MYSQL_BIND]
-    discard mysql_stmt_close(stmt)
-
 proc dbQuote(s: string): string =
+  #if s.len > 0 and allCharsInSet(s, {'0'..'9'}): result = s
+  #else:
   result = "'"
   for c in items(s):
     if c == '\'': add(result, "''")
@@ -86,7 +78,8 @@ proc setupQuery(db: TDbConn, query: TSqlQuery,
 proc setRow(res: PPGresult, r: var TRow, line, cols: int) =
   for col in 0..cols-1:
     setLen(r[col], 0)
-    add(r[col], PQgetvalue(res, line, cols))    
+    var x = PQgetvalue(res, line, col)
+    add(r[col], x)
   
 iterator dbFastRows*(db: TDbConn, query: TSqlQuery,
                      args: openarray[string]): TRow =
@@ -118,10 +111,8 @@ proc dbGetValue*(db: TDbConn, query: TSqlQuery,
   ## executes the query and returns the result dataset's the first column 
   ## of the first row. Returns "" if the dataset contains no rows. This uses
   ## `dbFastRows`, so it inherits its fragile behaviour.
-  result = ""
-  for row in dbFastRows(db, query, args): 
-    result = row[0]
-    break
+  var x = PQgetvalue(setupQuery(db, query, args), 0, 0)
+  result = if isNil(x): "" else: $x
   
 proc dbTryInsertID*(db: TDbConn, query: TSqlQuery, 
                     args: openarray[string]): int64 =
@@ -134,11 +125,6 @@ proc dbTryInsertID*(db: TDbConn, query: TSqlQuery,
     result = ParseBiggestInt(val)
   else:
     result = -1
-  #if mysqlRealQuery(db, q, q.len) != 0'i32: 
-  #  result = -1'i64
-  #else:
-  #  result = mysql_insert_id(db)
-  #LAST_INSERT_ID()
 
 proc dbInsertID*(db: TDbConn, query: TSqlQuery, 
                  args: openArray[string]): int64 = 
diff --git a/lib/system/excpt.nim b/lib/system/excpt.nim
index 01d98c205..4d7b41da2 100755
--- a/lib/system/excpt.nim
+++ b/lib/system/excpt.nim
@@ -194,13 +194,15 @@ proc signalHandler(sig: cint) {.exportc: "signalHandler", noconv.} =
   rawWriteStackTrace(buf)
 
   if s == SIGINT: add(buf, "SIGINT: Interrupted by Ctrl-C.\n")
-  elif s == SIGSEGV: add(buf, "SIGSEGV: Illegal storage access.\n")
+  elif s == SIGSEGV: 
+    add(buf, "SIGSEGV: Illegal storage access. (Attempt to read from nil?)\n")
   elif s == SIGABRT:
     if dbgAborting: return # the debugger wants to abort
     add(buf, "SIGABRT: Abnormal termination.\n")
   elif s == SIGFPE: add(buf, "SIGFPE: Arithmetic error.\n")
   elif s == SIGILL: add(buf, "SIGILL: Illegal operation.\n")
-  elif s == SIGBUS: add(buf, "SIGBUS: Illegal storage access.\n")
+  elif s == SIGBUS: 
+    add(buf, "SIGBUS: Illegal storage access. (Attempt to read from nil?)\n")
   else: add(buf, "unknown signal\n")
   writeToStdErr(buf)
   dbgAborting = True # play safe here...
diff --git a/lib/system/sysio.nim b/lib/system/sysio.nim
index 8b6d0e285..3c99a5eed 100755
--- a/lib/system/sysio.nim
+++ b/lib/system/sysio.nim
@@ -51,7 +51,6 @@ proc readLine(f: TFile): string =
   result = ""
   rawReadLine(f, result)
 
-proc write(f: TFile, s: string) = fputs(s, f)
 proc write(f: TFile, i: int) = 
   when sizeof(int) == 8:
     fprintf(f, "%lld", i)
@@ -167,6 +166,10 @@ proc writeChars(f: TFile, a: openarray[char], start, len: int): int =
 proc writeBuffer(f: TFile, buffer: pointer, len: int): int =
   result = fwrite(buffer, 1, len, f)
 
+proc write(f: TFile, s: string) =
+  if writeBuffer(f, cstring(s), s.len) != s.len:
+    raise newException(EIO, "cannot write string to file")
+
 proc setFilePos(f: TFile, pos: int64) =
   if fseek(f, clong(pos), 0) != 0:
     raise newException(EIO, "cannot set file position")
diff --git a/web/community.txt b/web/community.txt
index 2cf85ce70..1a8b1c38b 100755
--- a/web/community.txt
+++ b/web/community.txt
@@ -1,5 +1,7 @@
 Discuss Nimrod in our `forum <http://force7.de/heimdall>`_. 
 
+We also have a `Wiki <http://force7.de/niwiki>`_.
+
 Visit our project page at Launchpad: https://launchpad.net/nimrod.
 
 Bug reports: https://bugs.launchpad.net/nimrod.
diff --git a/web/news.txt b/web/news.txt
index 47a112a96..ec8169e72 100755
--- a/web/news.txt
+++ b/web/news.txt
@@ -14,7 +14,9 @@ Bugfixes
 - Fixed bug #502670 (underscores in identifiers).
 - Fixed a bug in the ``parsexml`` module concerning the parsing of
   ``<tag attr="value" />``.
-
+- ``system.write(f: TFile, s: string)`` now works even if ``s`` contains binary
+  zeros.
+  
 
 Additions
 ---------
diff --git a/web/question.txt b/web/question.txt
index 17a1abfcf..cccac2e1b 100755
--- a/web/question.txt
+++ b/web/question.txt
@@ -25,6 +25,12 @@ flexibility for speed. You get both.
     this programming modell as convenient as possible
 
 
+Why is it named Nimrod?
+-----------------------
+You have to find out for yourself. If you don't find a tongue-in-cheek 
+interpretation you have to look harder.
+
+
 How is Nimrod licensed?
 -----------------------
 
@@ -54,9 +60,9 @@ If you delete the line ``gcc.path = r"$nimrod\dist\mingw\bin"``, Nimrod uses
 the GCC from your ``PATH`` environment variable. 
 
 If you cannot modify ``$nimrod\config\nimrod.cfg``, copy 
-``$nimrod\config\nimrod.cfg`` to ``$APPDATA\nimrod.cfg`` and modify 
-``$APPDATA\nimrod.cfg`` instead. To determine what ``$APPDATA`` means for your
-Windows account, use the shell command::
+``$nimrod\config\nimrod.cfg`` to ``%APPDATA%\nimrod.cfg`` and modify 
+``%APPDATA%\nimrod.cfg`` instead. To determine what ``%APPDATA%`` means for 
+your Windows account, use the shell command::
 
   echo %APPDATA%
 
@@ -90,26 +96,5 @@ different command line arguments try the ``--passc`` and ``--passl`` switches.
 Unsupported compilers contain serious bugs that keep them from bootstrapping
 Nimrod.
 
-The linker outputs strange errors about missing symbols
--------------------------------------------------------
-
-I have seen this bug only with the GNU linker. The reason for this unknown.
-Try recompiling your code with the ``--force_build`` command line switch.
-
-
-Why is compilation so slow?
----------------------------
-
-There are two reasons for this:
 
-(1) Nimrod always recompiles **everything** (but only calls the C compiler for 
-    modules that changed). In a future version, only modules that have changed 
-    will be recompiled.
-(2) The C compiler that is called by Nimrod may be slow.
-    Especially GCC's compile times are not very heady. On Linux you may be able
-    to get `Tiny C <http://bellard.org/tcc/>`_ to work. TCC has excellent 
-    compile times. You should not use TCC for producing the release version 
-    though, as it has no optimizer.
 
-Note that from version 0.7.10 onwards the default build produces an optimized
-binary.