gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r2607 - Extractor/src/plugins GNUnet GNUnet/bin GNUnet/cont


From: grothoff
Subject: [GNUnet-SVN] r2607 - Extractor/src/plugins GNUnet GNUnet/bin GNUnet/contrib GNUnet/doc GNUnet/po GNUnet/src/applications/fs/ecrs GNUnet/src/applications/fs/fsui GNUnet/src/include GNUnet/src/util GNUnet-docs/WWW gnunet-gtk gnunet-gtk/src/plugins/fs i18nHTML/src
Date: Sat, 1 Apr 2006 20:15:14 -0800 (PST)

Author: grothoff
Date: 2006-04-01 20:14:43 -0800 (Sat, 01 Apr 2006)
New Revision: 2607

Removed:
   GNUnet/bin/getleaks
   GNUnet/doc/memoryleak.txt
Modified:
   Extractor/src/plugins/pdfextractor.c
   GNUnet-docs/WWW/user_gnunet.php3
   GNUnet/ChangeLog
   GNUnet/contrib/serve_hostlist.sh
   GNUnet/po/GNUnet.pot
   GNUnet/po/de.po
   GNUnet/po/rw.po
   GNUnet/po/sv.po
   GNUnet/po/vi.po
   GNUnet/src/applications/fs/ecrs/directory.c
   GNUnet/src/applications/fs/ecrs/download.c
   GNUnet/src/applications/fs/ecrs/keyspace.c
   GNUnet/src/applications/fs/ecrs/meta.c
   GNUnet/src/applications/fs/ecrs/metatest.c
   GNUnet/src/applications/fs/ecrs/metatest2.c
   GNUnet/src/applications/fs/ecrs/namespace.c
   GNUnet/src/applications/fs/ecrs/search.c
   GNUnet/src/applications/fs/fsui/download.c
   GNUnet/src/applications/fs/fsui/file_info.c
   GNUnet/src/applications/fs/fsui/fsui.c
   GNUnet/src/applications/fs/fsui/namespace_info.c
   GNUnet/src/applications/fs/fsui/search.c
   GNUnet/src/applications/fs/fsui/upload.c
   GNUnet/src/include/gnunet_ecrs_lib.h
   GNUnet/src/util/hashtable.c
   GNUnet/src/util/hashtabletest.c
   GNUnet/src/util/initialize.c
   GNUnet/src/util/xmalloc.c
   gnunet-gtk/ChangeLog
   gnunet-gtk/README
   gnunet-gtk/TODO
   gnunet-gtk/src/plugins/fs/namespace.c
   gnunet-gtk/src/plugins/fs/search.c
   gnunet-gtk/src/plugins/fs/upload.c
   i18nHTML/src/commitMassTranslation.php
   i18nHTML/src/commitTranslation.php
   i18nHTML/src/editor.php
   i18nHTML/src/i18nhtml.inc.php
   i18nHTML/src/i18nhtml_config.inc.php
   i18nHTML/src/start.php
   i18nHTML/src/status.php
   i18nHTML/src/translate.php
Log:
sync

Modified: Extractor/src/plugins/pdfextractor.c
===================================================================
--- Extractor/src/plugins/pdfextractor.c        2006-04-02 04:08:42 UTC (rev 
2606)
+++ Extractor/src/plugins/pdfextractor.c        2006-04-02 04:14:43 UTC (rev 
2607)
@@ -21,7 +21,6 @@
 /**
  * TODO:
  * - code clean up (factor out some parsing aspects?)
- * - proper string decoding (escape sequences)
  * - proper dictionary support
  * - filters (compression!)
  * - page count (and other document catalog information,
@@ -80,6 +79,8 @@
 stringDecode(const char * pdfString,
             size_t * size) {
   size_t slen;
+  size_t r;
+  size_t w;
   unsigned char * ret;
   char hex[3];
   int i;
@@ -92,9 +93,75 @@
   case '(':
     if (pdfString[slen-1] != ')')    
       return NULL;
-    /* todo: recode escape sequences! */
-    *size = slen - 2;
-    return stndup(&pdfString[1], slen-2);     
+    ret = malloc(slen);
+    w = 0;
+    for (r=1;r<slen-1;r++) {
+      if (pdfString[r] == '/') {
+       r++;
+       switch (pdfString[r]) {
+       case '/':
+         ret[w++] = '/';
+         break;
+       case 'n':
+         ret[w++] = '\n';
+         break;
+       case 'r':
+         ret[w++] = '\r';
+         break;
+       case 't':
+         ret[w++] = '\t';
+         break;
+       case 'b':
+         ret[w++] = '\b';
+         break;
+       case 'f':
+         ret[w++] = '\f';
+         break;
+       case '(':
+         ret[w++] = '(';
+         break;
+       case ')':
+         ret[w++] = ')';
+         break;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9': {
+         char buf[4];
+         unsigned int u;
+         memset(buf, 0, 4);
+         buf[0] = pdfString[r++];
+         if ( (pdfString[r] >= '0') &&
+              (pdfString[r] <= '9') )
+           buf[1] = pdfString[r++];
+         if ( (pdfString[r] >= '0') &&
+              (pdfString[r] <= '9') )
+           buf[2] = pdfString[r++];
+         if (1 == sscanf(buf, "%o", &u)) {
+           ret[w++] = (char) u;
+         } else {
+           free(ret);
+           return NULL; /* invalid! */
+         }            
+         break;
+       }
+       default: /* invalid */
+         free(ret);
+         return NULL;
+       }
+      } else {
+       ret[w++] = pdfString[r];
+      }
+    }
+    ret[w] = '/';
+    *size = w;
+    return ret;
   case '<':
     if (pdfString[slen-1] != '>')
       return NULL;
@@ -138,7 +205,6 @@
                         size - 2,
                         "UNICODEBIG");
   }
-    
 }
 
 static struct {
@@ -401,7 +467,6 @@
            (IS_NL(data[pos])) )
       pos++;
   }
-
   return prev;
 }
 

Modified: GNUnet/ChangeLog
===================================================================
--- GNUnet/ChangeLog    2006-04-02 04:08:42 UTC (rev 2606)
+++ GNUnet/ChangeLog    2006-04-02 04:14:43 UTC (rev 2607)
@@ -1,7 +1,10 @@
+Sat Mar 18 12:54:11 PST 2006
+       Releasing GNUnet 0.7.0c.
+
 Thu Mar 16 22:14:01 PST 2006
        Fixing various routing problems (resulting in better utilization
        of bandwidth by routing more content and less queries).
-
+       
 Wed Mar 15 00:00:14 PST 2006
        Fixing various content migration bugs (one that disabled it,
        one that made it unlikely that migration was even tried, and

Deleted: GNUnet/bin/getleaks
===================================================================
--- GNUnet/bin/getleaks 2006-04-02 04:08:42 UTC (rev 2606)
+++ GNUnet/bin/getleaks 2006-04-02 04:14:43 UTC (rev 2607)
@@ -1,22 +0,0 @@
-#!/bin/sh
-# script to find the list of memory leaks in the GNUnet output when run with 
the xmalloc
-# memory leak detector at debug-level 2
-cat out | grep free > out.free
-cat out | grep malloc > out.malloc
-A=`cat out.malloc | awk '{ print $1 }' | sort | uniq`
-for n in $A
-do
- M=`grep $n out.malloc | wc -l`
- F=`grep $n out.free | wc -l`
- if test $M -gt $F
- then 
-  echo "Address $n allocated $M times, free $F times"
-  grep $n out.malloc | tail -n 1
- fi
-done
-
-#cat out | grep free | awk '{ print $1 }' | uniq -c | 
-#cat out | grep malloc | awk '{ print $1 } ' | uniq -c 
-#cat out | sort | awk '{ print $1 }' | uniq -c | grep "      1"  | awk '{ 
print $2 } ' > list
-#
-#cat out | sort | grep -v free | grep -f list

Modified: GNUnet/contrib/serve_hostlist.sh
===================================================================
--- GNUnet/contrib/serve_hostlist.sh    2006-04-02 04:08:42 UTC (rev 2606)
+++ GNUnet/contrib/serve_hostlist.sh    2006-04-02 04:14:43 UTC (rev 2607)
@@ -15,14 +15,30 @@
 # Usage:
 #      nohup ./serve_hostlist.sh &
 
-while true; do
+if test -z "$NODE"
+then
+ NODE="*"
+fi
+
+if test -z "$PORT"
+then
+ PORT=80
+fi
+
+if test -z "$GNUNETD_HOME"
+then
+ GNUNETD_HOME=/var/lib/GNUnet
+fi
+
+while true
+do
  echo -n HTTP/1.0 200 OK > /tmp/gnunet-hostlist-$$
  echo -e "\r\n\r" >> /tmp/gnunet-hostlist-$$
- cat $GNUNETD_HOME/data/hosts/$NODE.* >> /tmp/gnunet-hostlist-$$
+ cat $GNUNETD_HOME/data/hosts/$NODE.{6,8,12,17,23,25} >> 
/tmp/gnunet-hostlist-$$
  nc -q 1 -l -p $PORT < /tmp/gnunet-hostlist-$$ > /dev/null
  if test $? -ne 0; then
-  rm /tmp/gnunet-hostlist*
+  rm -f /tmp/gnunet-hostlist*
   exit;
  fi
- rm /tmp/gnunet-hostlist-$$
-done;
+ rm -f /tmp/gnunet-hostlist-$$
+done

Deleted: GNUnet/doc/memoryleak.txt
===================================================================
--- GNUnet/doc/memoryleak.txt   2006-04-02 04:08:42 UTC (rev 2606)
+++ GNUnet/doc/memoryleak.txt   2006-04-02 04:14:43 UTC (rev 2607)
@@ -1,77 +0,0 @@
-This document describes how to debug GNUnet for memory leaks.
-=============================================================
-
-Step 0: learn about valgrind
-----------------------------
-
-* run it, be delighted
-* you may find the VALGRIND option for gnunetd helpful
-  (to stop gnunetd after N seconds without a signal)
-* it should find all and more leaks than the technique
-  below describes.  
-* But valgrind may not be available (sorry, Intel only)
-  on your architecture or you may need some more information
-  about the dynamic allocation behavior than valgrind gives
-  you.  Then read on.
-
-
-Step 1: Activate Memory Leak Debugging
---------------------------------------
-
-* Edit src/util/xmalloc.c and set 'DEBUG_MALLOC' to 2.
-* Recompile (make install).
-
-
-Step 2: Get profiling information
----------------------------------
-
-* Run gnunetd or whichever other app you want to profile
-* Turn of all other debugging output (e.g. -d -L NOTHING)
-* Gather the xmalloc output in a file "out" (e.g. > out)
-* Ensure you have enough space, the file may get huge.
-* The one line executive summary:
-
-# bin/gnunetd -d -L NOTHING > out
-
-After you wait a while, do insert, search and download or
-whatever else you want to test, stop the app (CTRL-C will
-do just fine).
-
-
-Step 3: Run the leak detector script
-------------------------------------
-
-* The out file must be in the current directory.
-* It may not be the fastest shell-script in the world,
-  depending on how much output you got
-# bin/getleaks
-
-
-Step 4: How to read the output
-------------------------------
-
-* bin/grepsrc.sh "descriptive string in output"
-  will give you the allocation site where memory
-  was allocated that was not freed
-* you will always (!) get many entries of objects
-  that were not supposed to be freed 
-* various HELOs are stored in pingpong.c and
-  knownhosts.c (often allocated in the transports 
-  and/or heloexchange) and persist there for 
-  a long time (round-robin buffer with 32 or 64
-  entries, freed only when another entry replaces
-  the current one). Those are not leaks! Don't
-  hunt the HELOs for too long!
-* You may NOT see all leaks, especially not leaks
-  of memory allocated not via xmalloc, e.g. by
-  libgcrypt, openssl, tdb or gdbm. You
-  need to watch for these manually.
-* If you have ambiguous allocation sites, disambiguate
-  by making the xmalloc strings unique.
-* Never send developers the whole 'out' trace, the
-  summary printed by getleaks will be fine.
-* You may want to ensure, e.g. with 'top', that
-  you actually have a leak. Fluctuations of a few
-  100k may occur even without a leak. If you have
-  a >20 MB gnunetd (without GDB!) you've probably got
-  one.

Modified: GNUnet/po/GNUnet.pot
===================================================================
--- GNUnet/po/GNUnet.pot        2006-04-02 04:08:42 UTC (rev 2606)
+++ GNUnet/po/GNUnet.pot        2006-04-02 04:14:43 UTC (rev 2607)
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"POT-Creation-Date: 2006-03-17 12:25-0800\n"
+"POT-Creation-Date: 2006-04-01 16:49-0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <address@hidden>\n"
 "Language-Team: LANGUAGE <address@hidden>\n"
@@ -550,12 +550,12 @@
 "Content `%s' seems to be not available on the network (tried %u times).\n"
 msgstr ""
 
-#: src/applications/fs/ecrs/meta.c:835
+#: src/applications/fs/ecrs/meta.c:842
 #, c-format
 msgid "Renaming of file `%s' to `%s' failed: %s\n"
 msgstr ""
 
-#: src/applications/fs/ecrs/meta.c:843
+#: src/applications/fs/ecrs/meta.c:850
 #, c-format
 msgid "Could not rename file `%s' to `%s': file exists\n"
 msgstr ""
@@ -572,21 +572,21 @@
 msgid "Cannot create pseudonym `%s', file `%s' exists.\n"
 msgstr ""
 
-#: src/applications/fs/ecrs/namespace.c:306
-#: src/applications/fs/ecrs/namespace.c:382
-#: src/applications/fs/ecrs/namespace.c:526
+#: src/applications/fs/ecrs/namespace.c:307
+#: src/applications/fs/ecrs/namespace.c:383
+#: src/applications/fs/ecrs/namespace.c:528
 #, c-format
 msgid "File `%s' does not contain a pseudonym.\n"
 msgstr ""
 
-#: src/applications/fs/ecrs/namespace.c:317
-#: src/applications/fs/ecrs/namespace.c:393
+#: src/applications/fs/ecrs/namespace.c:318
+#: src/applications/fs/ecrs/namespace.c:394
 #, c-format
 msgid "Format of pseudonym `%s' is invalid.\n"
 msgstr ""
 
-#: src/applications/fs/ecrs/namespace.c:536
-#: src/applications/fs/ecrs/namespace.c:546
+#: src/applications/fs/ecrs/namespace.c:538
+#: src/applications/fs/ecrs/namespace.c:548
 #, c-format
 msgid "Format of file `%s' is invalid.\n"
 msgstr ""
@@ -633,11 +633,11 @@
 msgid "Indexing data failed at position %i.\n"
 msgstr ""
 
-#: src/applications/fs/fsui/download.c:289
+#: src/applications/fs/fsui/download.c:290
 msgid "Download aborted."
 msgstr ""
 
-#: src/applications/fs/fsui/download.c:292
+#: src/applications/fs/fsui/download.c:293
 msgid "ECRS download failed (see logs)."
 msgstr ""
 
@@ -659,7 +659,7 @@
 msgid "FSUI persistence: error restoring download\n"
 msgstr ""
 
-#: src/applications/fs/fsui/fsui.c:621
+#: src/applications/fs/fsui/fsui.c:620
 #, c-format
 msgid "FSUI state file `%s' had syntax error at offset %u.\n"
 msgstr ""
@@ -668,11 +668,11 @@
 msgid "No keywords specified!\n"
 msgstr ""
 
-#: src/applications/fs/fsui/namespace_info.c:581
+#: src/applications/fs/fsui/namespace_info.c:583
 msgid "Publication interval for periodic publication changed."
 msgstr ""
 
-#: src/applications/fs/fsui/namespace_info.c:602
+#: src/applications/fs/fsui/namespace_info.c:604
 msgid ""
 "Publishing update for periodically updated content more than a week ahead of "
 "schedule.\n"
@@ -687,11 +687,11 @@
 msgstr ""
 
 #: src/applications/fs/fsui/upload.c:402 src/applications/fs/fsui/upload.c:439
-msgid "Upload failed.\n"
+msgid "Upload failed."
 msgstr ""
 
 #: src/applications/fs/fsui/upload.c:446
-msgid "Cannot upload directory without using recursion.\n"
+msgid "Cannot upload directory without using recursion."
 msgstr ""
 
 #: src/applications/fs/module/fs.c:1090
@@ -740,7 +740,7 @@
 "Unindexed ODB block `%s' from offset %llu already missing from datastore.\n"
 msgstr ""
 
-#: src/applications/fs/module/anonymity.c:65 src/applications/gap/gap.c:1719
+#: src/applications/fs/module/anonymity.c:65 src/applications/gap/gap.c:1727
 msgid "Failed to get traffic stats.\n"
 msgstr ""
 
@@ -1249,83 +1249,92 @@
 msgid "`%s' failed.  Is `%s' a file?\n"
 msgstr ""
 
-#: src/applications/gap/gap.c:1708
+#: src/applications/gap/gap.c:1551
+#, c-format
+msgid "GAP received invalid content from `%s'\n"
+msgstr ""
+
+#: src/applications/gap/gap.c:1552
+msgid "myself"
+msgstr ""
+
+#: src/applications/gap/gap.c:1716
 msgid ""
 "Cover traffic requested but traffic service not loaded.  Rejecting request.\n"
 msgstr ""
 
-#: src/applications/gap/gap.c:1725 src/applications/gap/gap.c:1730
-#: src/applications/gap/gap.c:1736
+#: src/applications/gap/gap.c:1733 src/applications/gap/gap.c:1738
+#: src/applications/gap/gap.c:1744
 msgid "Cannot satisfy desired level of anonymity, ignoring request.\n"
 msgstr ""
 
-#: src/applications/gap/gap.c:1987
+#: src/applications/gap/gap.c:1995
 msgid "# gap requests total received"
 msgstr ""
 
-#: src/applications/gap/gap.c:1988
+#: src/applications/gap/gap.c:1996
 msgid "# gap requests policy: immediate drop"
 msgstr ""
 
-#: src/applications/gap/gap.c:1989
+#: src/applications/gap/gap.c:1997
 msgid "# gap requests policy: not routed"
 msgstr ""
 
-#: src/applications/gap/gap.c:1990
+#: src/applications/gap/gap.c:1998
 msgid "# gap requests policy: not answered"
 msgstr ""
 
-#: src/applications/gap/gap.c:1991
+#: src/applications/gap/gap.c:1999
 msgid "# gap requests processed: attempted add to RT"
 msgstr ""
 
-#: src/applications/gap/gap.c:1992
+#: src/applications/gap/gap.c:2000
 msgid "# gap requests processed: local result"
 msgstr ""
 
-#: src/applications/gap/gap.c:1993
+#: src/applications/gap/gap.c:2001
 msgid "# gap routing successes (total)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1994
+#: src/applications/gap/gap.c:2002
 msgid "# gap requests dropped: collision in RT"
 msgstr ""
 
-#: src/applications/gap/gap.c:1995
+#: src/applications/gap/gap.c:2003
 msgid "# gap requests forwarded (counting each peer)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1996
+#: src/applications/gap/gap.c:2004
 msgid "# gap duplicate requests (pending)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1997
+#: src/applications/gap/gap.c:2005
 msgid "# gap duplicate requests that were re-tried"
 msgstr ""
 
-#: src/applications/gap/gap.c:1998
+#: src/applications/gap/gap.c:2006
 msgid "# gap re-try ttl difference (cummulative)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1999
+#: src/applications/gap/gap.c:2007
 msgid "# gap reply duplicates"
 msgstr ""
 
-#: src/applications/gap/gap.c:2000
+#: src/applications/gap/gap.c:2008
 msgid "# gap spurious replies"
 msgstr ""
 
-#: src/applications/gap/gap.c:2001
+#: src/applications/gap/gap.c:2009
 msgid "# gap routing slots currently in use"
 msgstr ""
 
-#: src/applications/gap/gap.c:2017
+#: src/applications/gap/gap.c:2025
 msgid ""
 "Traffic service failed to load; gap cannot ensure cover-traffic "
 "availability.\n"
 msgstr ""
 
-#: src/applications/gap/gap.c:2048
+#: src/applications/gap/gap.c:2056
 #, c-format
 msgid "`%s' registering handlers %d %d\n"
 msgstr ""
@@ -1564,8 +1573,8 @@
 #: src/applications/sqstore_sqlite/sqlite.c:51 src/util/hostkey_gcrypt.c:56
 #: src/util/hostkey_gcrypt.c:63 src/util/storage.c:643
 #: src/util/symcipher_gcrypt.c:47 src/util/symcipher_gcrypt.c:54
-#: src/include/gnunet_util.h:1030 src/include/gnunet_util.h:1037
-#: src/include/gnunet_util.h:1039
+#: src/include/gnunet_util.h:1033 src/include/gnunet_util.h:1040
+#: src/include/gnunet_util.h:1042
 #, c-format
 msgid "`%s' failed at %s:%d with error: %s\n"
 msgstr ""
@@ -3689,7 +3698,7 @@
 msgid "RSA signature verification failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/initialize.c:231
+#: src/util/initialize.c:226
 msgid "Shutdown complete.\n"
 msgstr ""
 
@@ -3916,7 +3925,7 @@
 msgid "Attempted path to `%s' was `%s'.\n"
 msgstr ""
 
-#: src/util/xmalloc.c:71
+#: src/util/xmalloc.c:52
 #, c-format
 msgid "Unexpected very large allocation (%u bytes) at %s:%d!\n"
 msgstr ""
@@ -3945,13 +3954,13 @@
 msgid "be verbose"
 msgstr ""
 
-#: src/include/gnunet_util.h:625 src/include/gnunet_util.h:627
+#: src/include/gnunet_util.h:628 src/include/gnunet_util.h:630
 #, c-format
 msgid "Assertion failed at %s:%d.\n"
 msgstr ""
 
-#: src/include/gnunet_util.h:1046 src/include/gnunet_util.h:1048
-#: src/include/gnunet_util.h:1055
+#: src/include/gnunet_util.h:1049 src/include/gnunet_util.h:1051
+#: src/include/gnunet_util.h:1058
 #, c-format
 msgid "`%s' failed on file `%s' at %s:%d with error: %s\n"
 msgstr ""

Modified: GNUnet/po/de.po
===================================================================
--- GNUnet/po/de.po     2006-04-02 04:08:42 UTC (rev 2606)
+++ GNUnet/po/de.po     2006-04-02 04:14:43 UTC (rev 2607)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: GNUnet 0.7.0b\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"POT-Creation-Date: 2006-03-17 12:25-0800\n"
+"POT-Creation-Date: 2006-04-01 16:49-0800\n"
 "PO-Revision-Date: 2006-03-17 21:37+0100\n"
 "Last-Translator: Nils Durner <address@hidden>\n"
 "Language-Team: German <address@hidden>\n"
@@ -571,12 +571,12 @@
 msgstr ""
 "Inhalt `%s' scheint im Netzwerk nicht verfügbar zu sein (%u mal versucht).\n"
 
-#: src/applications/fs/ecrs/meta.c:835
+#: src/applications/fs/ecrs/meta.c:842
 #, c-format
 msgid "Renaming of file `%s' to `%s' failed: %s\n"
 msgstr "Umbenennen der Datei `%s' zu `%s' fehlgeschlagen: %s\n"
 
-#: src/applications/fs/ecrs/meta.c:843
+#: src/applications/fs/ecrs/meta.c:850
 #, c-format
 msgid "Could not rename file `%s' to `%s': file exists\n"
 msgstr ""
@@ -598,21 +598,21 @@
 "Pseudonym `%s' kann nicht erstellt werden, da die Datei `%s' bereits "
 "existiert.\n"
 
-#: src/applications/fs/ecrs/namespace.c:306
-#: src/applications/fs/ecrs/namespace.c:382
-#: src/applications/fs/ecrs/namespace.c:526
+#: src/applications/fs/ecrs/namespace.c:307
+#: src/applications/fs/ecrs/namespace.c:383
+#: src/applications/fs/ecrs/namespace.c:528
 #, c-format
 msgid "File `%s' does not contain a pseudonym.\n"
 msgstr "Die Datei `%s' enthält kein Pseudonym.\n"
 
-#: src/applications/fs/ecrs/namespace.c:317
-#: src/applications/fs/ecrs/namespace.c:393
+#: src/applications/fs/ecrs/namespace.c:318
+#: src/applications/fs/ecrs/namespace.c:394
 #, c-format
 msgid "Format of pseudonym `%s' is invalid.\n"
 msgstr "Format des Pseudonyms `%s' ist ungültig.\n"
 
-#: src/applications/fs/ecrs/namespace.c:536
-#: src/applications/fs/ecrs/namespace.c:546
+#: src/applications/fs/ecrs/namespace.c:538
+#: src/applications/fs/ecrs/namespace.c:548
 #, c-format
 msgid "Format of file `%s' is invalid.\n"
 msgstr "Format der Datei `%s' ist ungültig.\n"
@@ -659,11 +659,11 @@
 msgid "Indexing data failed at position %i.\n"
 msgstr "Indizierung der Daten schlug an Position %i fehl.\n"
 
-#: src/applications/fs/fsui/download.c:289
+#: src/applications/fs/fsui/download.c:290
 msgid "Download aborted."
 msgstr "Download abgebrochen."
 
-#: src/applications/fs/fsui/download.c:292
+#: src/applications/fs/fsui/download.c:293
 msgid "ECRS download failed (see logs)."
 msgstr "ECRS Download schlug fehl (siehe Protokolldateien)."
 
@@ -685,7 +685,7 @@
 msgid "FSUI persistence: error restoring download\n"
 msgstr "FSUI Beständigkeit: Fehler beim Wiederherstellen des Downloads\n"
 
-#: src/applications/fs/fsui/fsui.c:621
+#: src/applications/fs/fsui/fsui.c:620
 #, c-format
 msgid "FSUI state file `%s' had syntax error at offset %u.\n"
 msgstr "FSUI Statusdatei `%s' hatte einen Syntaxfehler bei Offset %u.\n"
@@ -694,12 +694,12 @@
 msgid "No keywords specified!\n"
 msgstr "Keine Schlüsselwörter angegeben!\n"
 
-#: src/applications/fs/fsui/namespace_info.c:581
+#: src/applications/fs/fsui/namespace_info.c:583
 msgid "Publication interval for periodic publication changed."
 msgstr ""
 "Veröffentlichungsintervall für periodische Veröffentlichung wurde geändert."
 
-#: src/applications/fs/fsui/namespace_info.c:602
+#: src/applications/fs/fsui/namespace_info.c:604
 msgid ""
 "Publishing update for periodically updated content more than a week ahead of "
 "schedule.\n"
@@ -716,14 +716,13 @@
 msgstr "Deindizierung schlug fehl."
 
 #: src/applications/fs/fsui/upload.c:402 src/applications/fs/fsui/upload.c:439
-msgid "Upload failed.\n"
-msgstr "Upload fehlgeschlagen.\n"
+msgid "Upload failed."
+msgstr "Upload fehlgeschlagen."
 
 #: src/applications/fs/fsui/upload.c:446
-msgid "Cannot upload directory without using recursion.\n"
+msgid "Cannot upload directory without using recursion."
 msgstr ""
-"Verzeichnis kann nicht ohne die Verwendung von Rekursion hochgeladen "
-"werden.\n"
+"Verzeichnis kann nicht ohne die Verwendung von Rekursion hochgeladen werden."
 
 #: src/applications/fs/module/fs.c:1090
 #, c-format
@@ -781,7 +780,7 @@
 "Deindizierter ODB Block `%s' vom Offset %llu fehlt bereits im "
 "Datenspeicher.\n"
 
-#: src/applications/fs/module/anonymity.c:65 src/applications/gap/gap.c:1719
+#: src/applications/fs/module/anonymity.c:65 src/applications/gap/gap.c:1727
 msgid "Failed to get traffic stats.\n"
 msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
 
@@ -1361,81 +1360,90 @@
 msgid "`%s' failed.  Is `%s' a file?\n"
 msgstr "`%s' schlug fehl. Ist `%s' eine Datei?\n"
 
-#: src/applications/gap/gap.c:1708
+#: src/applications/gap/gap.c:1551
+#, c-format
+msgid "GAP received invalid content from `%s'\n"
+msgstr "GAP hat ungültige Inhalte von `%s' empfangen.\n"
+
+#: src/applications/gap/gap.c:1552
+msgid "myself"
+msgstr ""
+
+#: src/applications/gap/gap.c:1716
 msgid ""
 "Cover traffic requested but traffic service not loaded.  Rejecting request.\n"
 msgstr ""
 "Verdeckender Netzwerkverkehr angefordert, aber der Verkehrsdienst wurde "
 "nicht geladen. Anfrage wird abgelehnt.\n"
 
-#: src/applications/gap/gap.c:1725 src/applications/gap/gap.c:1730
-#: src/applications/gap/gap.c:1736
+#: src/applications/gap/gap.c:1733 src/applications/gap/gap.c:1738
+#: src/applications/gap/gap.c:1744
 msgid "Cannot satisfy desired level of anonymity, ignoring request.\n"
 msgstr ""
 "Gewünschter Grad an Anonymität kann nicht erreicht werden, Anfrage wird "
 "ignoriert.\n"
 
-#: src/applications/gap/gap.c:1987
+#: src/applications/gap/gap.c:1995
 msgid "# gap requests total received"
 msgstr "# gap Anfragen insgesamt empfangen"
 
-#: src/applications/gap/gap.c:1988
+#: src/applications/gap/gap.c:1996
 msgid "# gap requests policy: immediate drop"
 msgstr "# gap Anfragen mit taktischer Entscheidung: sofortiges Verwerfen"
 
-#: src/applications/gap/gap.c:1989
+#: src/applications/gap/gap.c:1997
 msgid "# gap requests policy: not routed"
 msgstr "# gap Anfragen mit taktischer Entscheidung: kein Routing"
 
-#: src/applications/gap/gap.c:1990
+#: src/applications/gap/gap.c:1998
 msgid "# gap requests policy: not answered"
 msgstr "# gap Anfragen mit taktischer Entscheidung: nicht Antworten"
 
-#: src/applications/gap/gap.c:1991
+#: src/applications/gap/gap.c:1999
 msgid "# gap requests processed: attempted add to RT"
 msgstr "# gap Anfragen verarbeitet: versucht, der RT hinzuzufügen"
 
-#: src/applications/gap/gap.c:1992
+#: src/applications/gap/gap.c:2000
 msgid "# gap requests processed: local result"
 msgstr "# gap Anfragen verarbeitet: lokales Ergebnis"
 
-#: src/applications/gap/gap.c:1993
+#: src/applications/gap/gap.c:2001
 msgid "# gap routing successes (total)"
 msgstr "# gap Routing erfolgreich (insgesamt)"
 
-#: src/applications/gap/gap.c:1994
+#: src/applications/gap/gap.c:2002
 msgid "# gap requests dropped: collision in RT"
 msgstr "# gap Anfragen verworfen: Kollision in RT"
 
-#: src/applications/gap/gap.c:1995
+#: src/applications/gap/gap.c:2003
 msgid "# gap requests forwarded (counting each peer)"
 msgstr "#gap Anfragen weitergeleitet (jeder Knoten gezählt)"
 
-#: src/applications/gap/gap.c:1996
+#: src/applications/gap/gap.c:2004
 msgid "# gap duplicate requests (pending)"
 msgstr "# gap doppelte Anfragen (unfertig)"
 
-#: src/applications/gap/gap.c:1997
+#: src/applications/gap/gap.c:2005
 msgid "# gap duplicate requests that were re-tried"
 msgstr "# gap doppelte Anfragen, die wiederholt wurden"
 
-#: src/applications/gap/gap.c:1998
+#: src/applications/gap/gap.c:2006
 msgid "# gap re-try ttl difference (cummulative)"
 msgstr "# gap Wiederholungs-TTL-Differenz (kummulativ)"
 
-#: src/applications/gap/gap.c:1999
+#: src/applications/gap/gap.c:2007
 msgid "# gap reply duplicates"
 msgstr "#gap doppelte Antworten"
 
-#: src/applications/gap/gap.c:2000
+#: src/applications/gap/gap.c:2008
 msgid "# gap spurious replies"
 msgstr "# gap falsche Antworten"
 
-#: src/applications/gap/gap.c:2001
+#: src/applications/gap/gap.c:2009
 msgid "# gap routing slots currently in use"
 msgstr "# gap Routingschächte im Moment in Verwendung"
 
-#: src/applications/gap/gap.c:2017
+#: src/applications/gap/gap.c:2025
 msgid ""
 "Traffic service failed to load; gap cannot ensure cover-traffic "
 "availability.\n"
@@ -1443,7 +1451,7 @@
 "Verkehrsdienst konnte nicht geladen werden, GAP kann keinen verdeckenden "
 "Netzwerkverkehr sicherstellen.\n"
 
-#: src/applications/gap/gap.c:2048
+#: src/applications/gap/gap.c:2056
 #, c-format
 msgid "`%s' registering handlers %d %d\n"
 msgstr "`%s' registriert Handler %d %d\n"
@@ -1703,8 +1711,8 @@
 #: src/applications/sqstore_sqlite/sqlite.c:51 src/util/hostkey_gcrypt.c:56
 #: src/util/hostkey_gcrypt.c:63 src/util/storage.c:643
 #: src/util/symcipher_gcrypt.c:47 src/util/symcipher_gcrypt.c:54
-#: src/include/gnunet_util.h:1030 src/include/gnunet_util.h:1037
-#: src/include/gnunet_util.h:1039
+#: src/include/gnunet_util.h:1033 src/include/gnunet_util.h:1040
+#: src/include/gnunet_util.h:1042
 #, c-format
 msgid "`%s' failed at %s:%d with error: %s\n"
 msgstr "`%s' schlug bei %s:%d mit dem Fehler %s fehl\n"
@@ -4134,7 +4142,7 @@
 msgid "RSA signature verification failed at %s:%d: %s\n"
 msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n"
 
-#: src/util/initialize.c:231
+#: src/util/initialize.c:226
 msgid "Shutdown complete.\n"
 msgstr "GNUnet wurde erfolgreich heruntergefahren.\n"
 
@@ -4373,7 +4381,7 @@
 msgid "Attempted path to `%s' was `%s'.\n"
 msgstr "Versuchter Pfad für `%s' war `%s'.\n"
 
-#: src/util/xmalloc.c:71
+#: src/util/xmalloc.c:52
 #, c-format
 msgid "Unexpected very large allocation (%u bytes) at %s:%d!\n"
 msgstr "Unerwartete sehr große Allokierung (%u Bytes) bei %s:%d!\n"
@@ -4402,13 +4410,13 @@
 msgid "be verbose"
 msgstr "umfangreiche Meldungen ausgeben"
 
-#: src/include/gnunet_util.h:625 src/include/gnunet_util.h:627
+#: src/include/gnunet_util.h:628 src/include/gnunet_util.h:630
 #, c-format
 msgid "Assertion failed at %s:%d.\n"
 msgstr "Absicherung fehlgeschlagen bei %s:%d.\n"
 
-#: src/include/gnunet_util.h:1046 src/include/gnunet_util.h:1048
-#: src/include/gnunet_util.h:1055
+#: src/include/gnunet_util.h:1049 src/include/gnunet_util.h:1051
+#: src/include/gnunet_util.h:1058
 #, c-format
 msgid "`%s' failed on file `%s' at %s:%d with error: %s\n"
 msgstr "`%s' schlug bei Datei `%s' fehl. Ort: %s:%d. Fehler: %s\n"

Modified: GNUnet/po/rw.po
===================================================================
--- GNUnet/po/rw.po     2006-04-02 04:08:42 UTC (rev 2606)
+++ GNUnet/po/rw.po     2006-04-02 04:14:43 UTC (rev 2607)
@@ -16,7 +16,7 @@
 msgstr ""
 "Project-Id-Version: GNUnet 0.7.0pre0\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"POT-Creation-Date: 2006-03-17 12:25-0800\n"
+"POT-Creation-Date: 2006-04-01 16:49-0800\n"
 "PO-Revision-Date: 2005-04-04 10:55-0700\n"
 "Last-Translator: Steven Michael Murphy <address@hidden>\n"
 "Language-Team: Kinyarwanda <address@hidden>\n"
@@ -587,12 +587,12 @@
 "Content `%s' seems to be not available on the network (tried %u times).\n"
 msgstr "Kuri OYA Bihari ku i urusobe"
 
-#: src/applications/fs/ecrs/meta.c:835
+#: src/applications/fs/ecrs/meta.c:842
 #, fuzzy, c-format
 msgid "Renaming of file `%s' to `%s' failed: %s\n"
 msgstr "Bya IDOSIYE Kuri Byanze"
 
-#: src/applications/fs/ecrs/meta.c:843
+#: src/applications/fs/ecrs/meta.c:850
 #, fuzzy, c-format
 msgid "Could not rename file `%s' to `%s': file exists\n"
 msgstr "OYA Guhindura izina IDOSIYE Kuri IDOSIYE"
@@ -609,21 +609,21 @@
 msgid "Cannot create pseudonym `%s', file `%s' exists.\n"
 msgstr "Kurema IDOSIYE"
 
-#: src/applications/fs/ecrs/namespace.c:306
-#: src/applications/fs/ecrs/namespace.c:382
-#: src/applications/fs/ecrs/namespace.c:526
+#: src/applications/fs/ecrs/namespace.c:307
+#: src/applications/fs/ecrs/namespace.c:383
+#: src/applications/fs/ecrs/namespace.c:528
 #, fuzzy, c-format
 msgid "File `%s' does not contain a pseudonym.\n"
 msgstr "Idosiye OYA a"
 
-#: src/applications/fs/ecrs/namespace.c:317
-#: src/applications/fs/ecrs/namespace.c:393
+#: src/applications/fs/ecrs/namespace.c:318
+#: src/applications/fs/ecrs/namespace.c:394
 #, fuzzy, c-format
 msgid "Format of pseudonym `%s' is invalid.\n"
 msgstr "Bya ni Sibyo Ijambobanga..."
 
-#: src/applications/fs/ecrs/namespace.c:536
-#: src/applications/fs/ecrs/namespace.c:546
+#: src/applications/fs/ecrs/namespace.c:538
+#: src/applications/fs/ecrs/namespace.c:548
 #, fuzzy, c-format
 msgid "Format of file `%s' is invalid.\n"
 msgstr "Bya ni Sibyo Ijambobanga..."
@@ -671,12 +671,12 @@
 msgid "Indexing data failed at position %i.\n"
 msgstr ""
 
-#: src/applications/fs/fsui/download.c:289
+#: src/applications/fs/fsui/download.c:290
 #, fuzzy
 msgid "Download aborted."
 msgstr "/Byahiswemo"
 
-#: src/applications/fs/fsui/download.c:292
+#: src/applications/fs/fsui/download.c:293
 #, fuzzy
 msgid "ECRS download failed (see logs)."
 msgstr "OYA Gufungura IDOSIYE"
@@ -699,7 +699,7 @@
 msgid "FSUI persistence: error restoring download\n"
 msgstr ""
 
-#: src/applications/fs/fsui/fsui.c:621
+#: src/applications/fs/fsui/fsui.c:620
 #, c-format
 msgid "FSUI state file `%s' had syntax error at offset %u.\n"
 msgstr ""
@@ -709,11 +709,11 @@
 msgid "No keywords specified!\n"
 msgstr "Amagambo fatizo"
 
-#: src/applications/fs/fsui/namespace_info.c:581
+#: src/applications/fs/fsui/namespace_info.c:583
 msgid "Publication interval for periodic publication changed."
 msgstr ""
 
-#: src/applications/fs/fsui/namespace_info.c:602
+#: src/applications/fs/fsui/namespace_info.c:604
 msgid ""
 "Publishing update for periodically updated content more than a week ahead of "
 "schedule.\n"
@@ -729,11 +729,12 @@
 msgstr "/Idosiye IDOSIYE"
 
 #: src/applications/fs/fsui/upload.c:402 src/applications/fs/fsui/upload.c:439
-msgid "Upload failed.\n"
-msgstr ""
+#, fuzzy
+msgid "Upload failed."
+msgstr "/Idosiye IDOSIYE"
 
 #: src/applications/fs/fsui/upload.c:446
-msgid "Cannot upload directory without using recursion.\n"
+msgid "Cannot upload directory without using recursion."
 msgstr ""
 
 #: src/applications/fs/module/fs.c:1090
@@ -782,7 +783,7 @@
 "Unindexed ODB block `%s' from offset %llu already missing from datastore.\n"
 msgstr ""
 
-#: src/applications/fs/module/anonymity.c:65 src/applications/gap/gap.c:1719
+#: src/applications/fs/module/anonymity.c:65 src/applications/gap/gap.c:1727
 #, fuzzy
 msgid "Failed to get traffic stats.\n"
 msgstr "Kuri Ikibazo# Ibyerekeye"
@@ -1406,86 +1407,95 @@
 msgid "`%s' failed.  Is `%s' a file?\n"
 msgstr "`%s'ntabwo ari idosiye"
 
-#: src/applications/gap/gap.c:1708
+#: src/applications/gap/gap.c:1551
+#, fuzzy, c-format
+msgid "GAP received invalid content from `%s'\n"
+msgstr "Sibyo Ubutumwa Bivuye"
+
+#: src/applications/gap/gap.c:1552
+msgid "myself"
+msgstr ""
+
+#: src/applications/gap/gap.c:1716
 msgid ""
 "Cover traffic requested but traffic service not loaded.  Rejecting request.\n"
 msgstr ""
 
-#: src/applications/gap/gap.c:1725 src/applications/gap/gap.c:1730
-#: src/applications/gap/gap.c:1736
+#: src/applications/gap/gap.c:1733 src/applications/gap/gap.c:1738
+#: src/applications/gap/gap.c:1744
 msgid "Cannot satisfy desired level of anonymity, ignoring request.\n"
 msgstr ""
 
-#: src/applications/gap/gap.c:1987
+#: src/applications/gap/gap.c:1995
 #, fuzzy
 msgid "# gap requests total received"
 msgstr "#BYAKIRIWE"
 
-#: src/applications/gap/gap.c:1988
+#: src/applications/gap/gap.c:1996
 msgid "# gap requests policy: immediate drop"
 msgstr ""
 
-#: src/applications/gap/gap.c:1989
+#: src/applications/gap/gap.c:1997
 msgid "# gap requests policy: not routed"
 msgstr ""
 
-#: src/applications/gap/gap.c:1990
+#: src/applications/gap/gap.c:1998
 msgid "# gap requests policy: not answered"
 msgstr ""
 
-#: src/applications/gap/gap.c:1991
+#: src/applications/gap/gap.c:1999
 msgid "# gap requests processed: attempted add to RT"
 msgstr ""
 
-#: src/applications/gap/gap.c:1992
+#: src/applications/gap/gap.c:2000
 msgid "# gap requests processed: local result"
 msgstr ""
 
-#: src/applications/gap/gap.c:1993
+#: src/applications/gap/gap.c:2001
 msgid "# gap routing successes (total)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1994
+#: src/applications/gap/gap.c:2002
 msgid "# gap requests dropped: collision in RT"
 msgstr ""
 
-#: src/applications/gap/gap.c:1995
+#: src/applications/gap/gap.c:2003
 msgid "# gap requests forwarded (counting each peer)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1996
+#: src/applications/gap/gap.c:2004
 msgid "# gap duplicate requests (pending)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1997
+#: src/applications/gap/gap.c:2005
 #, fuzzy
 msgid "# gap duplicate requests that were re-tried"
 msgstr "#BYAKIRIWE"
 
-#: src/applications/gap/gap.c:1998
+#: src/applications/gap/gap.c:2006
 msgid "# gap re-try ttl difference (cummulative)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1999
+#: src/applications/gap/gap.c:2007
 msgid "# gap reply duplicates"
 msgstr ""
 
-#: src/applications/gap/gap.c:2000
+#: src/applications/gap/gap.c:2008
 #, fuzzy
 msgid "# gap spurious replies"
 msgstr "#hejuru Ibibazo BYAKIRIWE"
 
-#: src/applications/gap/gap.c:2001
+#: src/applications/gap/gap.c:2009
 msgid "# gap routing slots currently in use"
 msgstr ""
 
-#: src/applications/gap/gap.c:2017
+#: src/applications/gap/gap.c:2025
 msgid ""
 "Traffic service failed to load; gap cannot ensure cover-traffic "
 "availability.\n"
 msgstr ""
 
-#: src/applications/gap/gap.c:2048
+#: src/applications/gap/gap.c:2056
 #, c-format
 msgid "`%s' registering handlers %d %d\n"
 msgstr ""
@@ -1739,8 +1749,8 @@
 #: src/applications/sqstore_sqlite/sqlite.c:51 src/util/hostkey_gcrypt.c:56
 #: src/util/hostkey_gcrypt.c:63 src/util/storage.c:643
 #: src/util/symcipher_gcrypt.c:47 src/util/symcipher_gcrypt.c:54
-#: src/include/gnunet_util.h:1030 src/include/gnunet_util.h:1037
-#: src/include/gnunet_util.h:1039
+#: src/include/gnunet_util.h:1033 src/include/gnunet_util.h:1040
+#: src/include/gnunet_util.h:1042
 #, fuzzy, c-format
 msgid "`%s' failed at %s:%d with error: %s\n"
 msgstr "`%s'Byanze ku Na: Ikosa"
@@ -4135,7 +4145,7 @@
 msgid "RSA signature verification failed at %s:%d: %s\n"
 msgstr "Isinya Byanze ku"
 
-#: src/util/initialize.c:231
+#: src/util/initialize.c:226
 #, fuzzy
 msgid "Shutdown complete.\n"
 msgstr "Byuzuye"
@@ -4367,7 +4377,7 @@
 msgid "Attempted path to `%s' was `%s'.\n"
 msgstr "Inzira Kuri"
 
-#: src/util/xmalloc.c:71
+#: src/util/xmalloc.c:52
 #, fuzzy, c-format
 msgid "Unexpected very large allocation (%u bytes) at %s:%d!\n"
 msgstr "Binini Bayite ku"
@@ -4401,13 +4411,13 @@
 msgid "be verbose"
 msgstr ""
 
-#: src/include/gnunet_util.h:625 src/include/gnunet_util.h:627
+#: src/include/gnunet_util.h:628 src/include/gnunet_util.h:630
 #, fuzzy, c-format
 msgid "Assertion failed at %s:%d.\n"
 msgstr "Byanze ku"
 
-#: src/include/gnunet_util.h:1046 src/include/gnunet_util.h:1048
-#: src/include/gnunet_util.h:1055
+#: src/include/gnunet_util.h:1049 src/include/gnunet_util.h:1051
+#: src/include/gnunet_util.h:1058
 #, fuzzy, c-format
 msgid "`%s' failed on file `%s' at %s:%d with error: %s\n"
 msgstr "`%s'Byanze ku IDOSIYE ku Na: Ikosa"

Modified: GNUnet/po/sv.po
===================================================================
--- GNUnet/po/sv.po     2006-04-02 04:08:42 UTC (rev 2606)
+++ GNUnet/po/sv.po     2006-04-02 04:14:43 UTC (rev 2607)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: GNUnet 0.7.0b\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"POT-Creation-Date: 2006-03-17 12:25-0800\n"
+"POT-Creation-Date: 2006-04-01 16:49-0800\n"
 "PO-Revision-Date: 2006-01-21 17:16+0100\n"
 "Last-Translator: Daniel Nylander <address@hidden>\n"
 "Language-Team: Swedish <address@hidden>\n"
@@ -551,12 +551,12 @@
 "Content `%s' seems to be not available on the network (tried %u times).\n"
 msgstr ""
 
-#: src/applications/fs/ecrs/meta.c:835
+#: src/applications/fs/ecrs/meta.c:842
 #, c-format
 msgid "Renaming of file `%s' to `%s' failed: %s\n"
 msgstr "Namnbyte på fil \"%s\" till \"%s\" misslyckades: %s\n"
 
-#: src/applications/fs/ecrs/meta.c:843
+#: src/applications/fs/ecrs/meta.c:850
 #, c-format
 msgid "Could not rename file `%s' to `%s': file exists\n"
 msgstr "Kunde inte byta namn på fil \"%s\" till \"%s\": filen existerar\n"
@@ -573,21 +573,21 @@
 msgid "Cannot create pseudonym `%s', file `%s' exists.\n"
 msgstr "Kan inte skapa pseudonym \"%s\", filen \"%s\" existerar.\n"
 
-#: src/applications/fs/ecrs/namespace.c:306
-#: src/applications/fs/ecrs/namespace.c:382
-#: src/applications/fs/ecrs/namespace.c:526
+#: src/applications/fs/ecrs/namespace.c:307
+#: src/applications/fs/ecrs/namespace.c:383
+#: src/applications/fs/ecrs/namespace.c:528
 #, c-format
 msgid "File `%s' does not contain a pseudonym.\n"
 msgstr "Filen \"%s\" innehåller ingen pseudonym.\n"
 
-#: src/applications/fs/ecrs/namespace.c:317
-#: src/applications/fs/ecrs/namespace.c:393
+#: src/applications/fs/ecrs/namespace.c:318
+#: src/applications/fs/ecrs/namespace.c:394
 #, c-format
 msgid "Format of pseudonym `%s' is invalid.\n"
 msgstr "Formatet på pseudonym \"%s\" är ogiltig.\n"
 
-#: src/applications/fs/ecrs/namespace.c:536
-#: src/applications/fs/ecrs/namespace.c:546
+#: src/applications/fs/ecrs/namespace.c:538
+#: src/applications/fs/ecrs/namespace.c:548
 #, c-format
 msgid "Format of file `%s' is invalid.\n"
 msgstr "Formatet på filen \"%s\" är ogiltig.\n"
@@ -634,11 +634,11 @@
 msgid "Indexing data failed at position %i.\n"
 msgstr "Indexering av data misslyckades vid position %i.\n"
 
-#: src/applications/fs/fsui/download.c:289
+#: src/applications/fs/fsui/download.c:290
 msgid "Download aborted."
 msgstr "Nedladdning avbruten."
 
-#: src/applications/fs/fsui/download.c:292
+#: src/applications/fs/fsui/download.c:293
 msgid "ECRS download failed (see logs)."
 msgstr ""
 
@@ -660,7 +660,7 @@
 msgid "FSUI persistence: error restoring download\n"
 msgstr ""
 
-#: src/applications/fs/fsui/fsui.c:621
+#: src/applications/fs/fsui/fsui.c:620
 #, c-format
 msgid "FSUI state file `%s' had syntax error at offset %u.\n"
 msgstr ""
@@ -669,11 +669,11 @@
 msgid "No keywords specified!\n"
 msgstr "Inga nyckelord angivna!\n"
 
-#: src/applications/fs/fsui/namespace_info.c:581
+#: src/applications/fs/fsui/namespace_info.c:583
 msgid "Publication interval for periodic publication changed."
 msgstr "Publiseringsintervall för periodisk publisering har ändrats."
 
-#: src/applications/fs/fsui/namespace_info.c:602
+#: src/applications/fs/fsui/namespace_info.c:604
 msgid ""
 "Publishing update for periodically updated content more than a week ahead of "
 "schedule.\n"
@@ -688,11 +688,12 @@
 msgstr "Avindexering misslyckades."
 
 #: src/applications/fs/fsui/upload.c:402 src/applications/fs/fsui/upload.c:439
-msgid "Upload failed.\n"
+#, fuzzy
+msgid "Upload failed."
 msgstr "Uppladdning misslyckades.\n"
 
 #: src/applications/fs/fsui/upload.c:446
-msgid "Cannot upload directory without using recursion.\n"
+msgid "Cannot upload directory without using recursion."
 msgstr ""
 
 #: src/applications/fs/module/fs.c:1090
@@ -743,7 +744,7 @@
 "Unindexed ODB block `%s' from offset %llu already missing from datastore.\n"
 msgstr ""
 
-#: src/applications/fs/module/anonymity.c:65 src/applications/gap/gap.c:1719
+#: src/applications/fs/module/anonymity.c:65 src/applications/gap/gap.c:1727
 msgid "Failed to get traffic stats.\n"
 msgstr ""
 
@@ -1275,83 +1276,92 @@
 msgid "`%s' failed.  Is `%s' a file?\n"
 msgstr "\"%s\" misslyckades.  Är \"%s\" en fil?\n"
 
-#: src/applications/gap/gap.c:1708
+#: src/applications/gap/gap.c:1551
+#, fuzzy, c-format
+msgid "GAP received invalid content from `%s'\n"
+msgstr "Mottog ogiltigt \"%s\" meddelande från \"%s\".\n"
+
+#: src/applications/gap/gap.c:1552
+msgid "myself"
+msgstr ""
+
+#: src/applications/gap/gap.c:1716
 msgid ""
 "Cover traffic requested but traffic service not loaded.  Rejecting request.\n"
 msgstr ""
 
-#: src/applications/gap/gap.c:1725 src/applications/gap/gap.c:1730
-#: src/applications/gap/gap.c:1736
+#: src/applications/gap/gap.c:1733 src/applications/gap/gap.c:1738
+#: src/applications/gap/gap.c:1744
 msgid "Cannot satisfy desired level of anonymity, ignoring request.\n"
 msgstr ""
 
-#: src/applications/gap/gap.c:1987
+#: src/applications/gap/gap.c:1995
 msgid "# gap requests total received"
 msgstr ""
 
-#: src/applications/gap/gap.c:1988
+#: src/applications/gap/gap.c:1996
 msgid "# gap requests policy: immediate drop"
 msgstr ""
 
-#: src/applications/gap/gap.c:1989
+#: src/applications/gap/gap.c:1997
 msgid "# gap requests policy: not routed"
 msgstr ""
 
-#: src/applications/gap/gap.c:1990
+#: src/applications/gap/gap.c:1998
 msgid "# gap requests policy: not answered"
 msgstr ""
 
-#: src/applications/gap/gap.c:1991
+#: src/applications/gap/gap.c:1999
 msgid "# gap requests processed: attempted add to RT"
 msgstr ""
 
-#: src/applications/gap/gap.c:1992
+#: src/applications/gap/gap.c:2000
 msgid "# gap requests processed: local result"
 msgstr ""
 
-#: src/applications/gap/gap.c:1993
+#: src/applications/gap/gap.c:2001
 msgid "# gap routing successes (total)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1994
+#: src/applications/gap/gap.c:2002
 msgid "# gap requests dropped: collision in RT"
 msgstr ""
 
-#: src/applications/gap/gap.c:1995
+#: src/applications/gap/gap.c:2003
 msgid "# gap requests forwarded (counting each peer)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1996
+#: src/applications/gap/gap.c:2004
 msgid "# gap duplicate requests (pending)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1997
+#: src/applications/gap/gap.c:2005
 msgid "# gap duplicate requests that were re-tried"
 msgstr ""
 
-#: src/applications/gap/gap.c:1998
+#: src/applications/gap/gap.c:2006
 msgid "# gap re-try ttl difference (cummulative)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1999
+#: src/applications/gap/gap.c:2007
 msgid "# gap reply duplicates"
 msgstr ""
 
-#: src/applications/gap/gap.c:2000
+#: src/applications/gap/gap.c:2008
 msgid "# gap spurious replies"
 msgstr ""
 
-#: src/applications/gap/gap.c:2001
+#: src/applications/gap/gap.c:2009
 msgid "# gap routing slots currently in use"
 msgstr ""
 
-#: src/applications/gap/gap.c:2017
+#: src/applications/gap/gap.c:2025
 msgid ""
 "Traffic service failed to load; gap cannot ensure cover-traffic "
 "availability.\n"
 msgstr ""
 
-#: src/applications/gap/gap.c:2048
+#: src/applications/gap/gap.c:2056
 #, c-format
 msgid "`%s' registering handlers %d %d\n"
 msgstr "\"%s\" registrerar handtag %d %d\n"
@@ -1594,8 +1604,8 @@
 #: src/applications/sqstore_sqlite/sqlite.c:51 src/util/hostkey_gcrypt.c:56
 #: src/util/hostkey_gcrypt.c:63 src/util/storage.c:643
 #: src/util/symcipher_gcrypt.c:47 src/util/symcipher_gcrypt.c:54
-#: src/include/gnunet_util.h:1030 src/include/gnunet_util.h:1037
-#: src/include/gnunet_util.h:1039
+#: src/include/gnunet_util.h:1033 src/include/gnunet_util.h:1040
+#: src/include/gnunet_util.h:1042
 #, c-format
 msgid "`%s' failed at %s:%d with error: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n"
@@ -3764,7 +3774,7 @@
 msgid "RSA signature verification failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/initialize.c:231
+#: src/util/initialize.c:226
 msgid "Shutdown complete.\n"
 msgstr "Nedstängning klar.\n"
 
@@ -4001,7 +4011,7 @@
 msgid "Attempted path to `%s' was `%s'.\n"
 msgstr "Försökt sökväg till \"%s\" var \"%s\".\n"
 
-#: src/util/xmalloc.c:71
+#: src/util/xmalloc.c:52
 #, c-format
 msgid "Unexpected very large allocation (%u bytes) at %s:%d!\n"
 msgstr "Icke-förväntad mycket stor allokering (%u byte) vid %s:%d!\n"
@@ -4030,13 +4040,13 @@
 msgid "be verbose"
 msgstr "var informativ"
 
-#: src/include/gnunet_util.h:625 src/include/gnunet_util.h:627
+#: src/include/gnunet_util.h:628 src/include/gnunet_util.h:630
 #, c-format
 msgid "Assertion failed at %s:%d.\n"
 msgstr ""
 
-#: src/include/gnunet_util.h:1046 src/include/gnunet_util.h:1048
-#: src/include/gnunet_util.h:1055
+#: src/include/gnunet_util.h:1049 src/include/gnunet_util.h:1051
+#: src/include/gnunet_util.h:1058
 #, c-format
 msgid "`%s' failed on file `%s' at %s:%d with error: %s\n"
 msgstr "\"%s\" misslyckades för fil \"%s\" vid %s:%d med fel: %s\n"

Modified: GNUnet/po/vi.po
===================================================================
--- GNUnet/po/vi.po     2006-04-02 04:08:42 UTC (rev 2606)
+++ GNUnet/po/vi.po     2006-04-02 04:14:43 UTC (rev 2607)
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: GNUnet 0.7.0pre4\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"POT-Creation-Date: 2006-03-17 12:25-0800\n"
+"POT-Creation-Date: 2006-04-01 16:49-0800\n"
 "PO-Revision-Date: 2005-07-05 21:18+0400\n"
 "Last-Translator: Phan Vinh Thinh <address@hidden>\n"
 "Language-Team: Vietnamese <address@hidden>\n"
@@ -559,12 +559,12 @@
 "Content `%s' seems to be not available on the network (tried %u times).\n"
 msgstr "Nội dung '%s' có vẻ không có trên mạng.\n"
 
-#: src/applications/fs/ecrs/meta.c:835
+#: src/applications/fs/ecrs/meta.c:842
 #, fuzzy, c-format
 msgid "Renaming of file `%s' to `%s' failed: %s\n"
 msgstr "Đổi tên tập tin '%s' thành '%s' thất bại: %s\n"
 
-#: src/applications/fs/ecrs/meta.c:843
+#: src/applications/fs/ecrs/meta.c:850
 #, fuzzy, c-format
 msgid "Could not rename file `%s' to `%s': file exists\n"
 msgstr "Không đổi tên được tập tin '%s' thành '%s': tập tin tồn tại\n"
@@ -583,21 +583,21 @@
 msgid "Cannot create pseudonym `%s', file `%s' exists.\n"
 msgstr "Không tạo được tên hiệu '%s', tập tin '%s' tồn tại.\n"
 
-#: src/applications/fs/ecrs/namespace.c:306
-#: src/applications/fs/ecrs/namespace.c:382
-#: src/applications/fs/ecrs/namespace.c:526
+#: src/applications/fs/ecrs/namespace.c:307
+#: src/applications/fs/ecrs/namespace.c:383
+#: src/applications/fs/ecrs/namespace.c:528
 #, fuzzy, c-format
 msgid "File `%s' does not contain a pseudonym.\n"
 msgstr "Tập tin '%s' không chứa một tên hiệu.\n"
 
-#: src/applications/fs/ecrs/namespace.c:317
-#: src/applications/fs/ecrs/namespace.c:393
+#: src/applications/fs/ecrs/namespace.c:318
+#: src/applications/fs/ecrs/namespace.c:394
 #, fuzzy, c-format
 msgid "Format of pseudonym `%s' is invalid.\n"
 msgstr "Định dạng của tên hiệu '%s' sai.\n"
 
-#: src/applications/fs/ecrs/namespace.c:536
-#: src/applications/fs/ecrs/namespace.c:546
+#: src/applications/fs/ecrs/namespace.c:538
+#: src/applications/fs/ecrs/namespace.c:548
 #, fuzzy, c-format
 msgid "Format of file `%s' is invalid.\n"
 msgstr "Định dạng của tập tin '%s' sai.\n"
@@ -645,11 +645,11 @@
 msgid "Indexing data failed at position %i.\n"
 msgstr "Đánh chỉ mục dữ liệu thất bại tại vị trí %i.\n"
 
-#: src/applications/fs/fsui/download.c:289
+#: src/applications/fs/fsui/download.c:290
 msgid "Download aborted."
 msgstr "Dừng tải xuống."
 
-#: src/applications/fs/fsui/download.c:292
+#: src/applications/fs/fsui/download.c:293
 msgid "ECRS download failed (see logs)."
 msgstr "Tải xuống ECRS thất bại (hãy xem các bản ghi log)."
 
@@ -671,7 +671,7 @@
 msgid "FSUI persistence: error restoring download\n"
 msgstr "FSUI: lỗi phục hồi tải xuống\n"
 
-#: src/applications/fs/fsui/fsui.c:621
+#: src/applications/fs/fsui/fsui.c:620
 #, fuzzy, c-format
 msgid "FSUI state file `%s' had syntax error at offset %u.\n"
 msgstr "Tập tin trạng thái FSUI '%s' có lỗi cú pháp tại vùng %u.\n"
@@ -680,12 +680,12 @@
 msgid "No keywords specified!\n"
 msgstr "Chưa chỉ ra từ khóa!\n"
 
-#: src/applications/fs/fsui/namespace_info.c:581
+#: src/applications/fs/fsui/namespace_info.c:583
 msgid "Publication interval for periodic publication changed."
 msgstr ""
 "Đã thay đổi khoảng thời gian giữa các lần đưa ra chia sẻ cho chia sẻ định kỳ."
 
-#: src/applications/fs/fsui/namespace_info.c:602
+#: src/applications/fs/fsui/namespace_info.c:604
 msgid ""
 "Publishing update for periodically updated content more than a week ahead of "
 "schedule.\n"
@@ -703,11 +703,13 @@
 msgstr "Bỏ đánh chỉ mục thất bại.\n"
 
 #: src/applications/fs/fsui/upload.c:402 src/applications/fs/fsui/upload.c:439
-msgid "Upload failed.\n"
+#, fuzzy
+msgid "Upload failed."
 msgstr "Tải lên thất bại.\n"
 
 #: src/applications/fs/fsui/upload.c:446
-msgid "Cannot upload directory without using recursion.\n"
+#, fuzzy
+msgid "Cannot upload directory without using recursion."
 msgstr "Không tải lên được thư mục khi không dùng đệ quy.\n"
 
 #: src/applications/fs/module/fs.c:1090
@@ -762,7 +764,7 @@
 "Unindexed ODB block `%s' from offset %llu already missing from datastore.\n"
 msgstr "Khối ODB đã bỏ chỉ mục '%s' từ %llu không có trong kho dữ liệu.\n"
 
-#: src/applications/fs/module/anonymity.c:65 src/applications/gap/gap.c:1719
+#: src/applications/fs/module/anonymity.c:65 src/applications/gap/gap.c:1727
 msgid "Failed to get traffic stats.\n"
 msgstr "Lấy các thông tin truyền tải không thành công.\n"
 
@@ -1316,81 +1318,90 @@
 msgid "`%s' failed.  Is `%s' a file?\n"
 msgstr "'%s' thất bại.  '%s' là một tập tin?\n"
 
-#: src/applications/gap/gap.c:1708
+#: src/applications/gap/gap.c:1551
+#, fuzzy, c-format
+msgid "GAP received invalid content from `%s'\n"
+msgstr "Nhận được thông báo sai '%s' từ '%s'.\n"
+
+#: src/applications/gap/gap.c:1552
+msgid "myself"
+msgstr ""
+
+#: src/applications/gap/gap.c:1716
 msgid ""
 "Cover traffic requested but traffic service not loaded.  Rejecting request.\n"
 msgstr ""
 "Đã yêu cầu che truyền tải nhưng chưa nạp dịch vụ truyền tải.  Đang nhả ra "
 "yêu cầu.\n"
 
-#: src/applications/gap/gap.c:1725 src/applications/gap/gap.c:1730
-#: src/applications/gap/gap.c:1736
+#: src/applications/gap/gap.c:1733 src/applications/gap/gap.c:1738
+#: src/applications/gap/gap.c:1744
 msgid "Cannot satisfy desired level of anonymity, ignoring request.\n"
 msgstr "Không thể thỏa mãn mức độ dấu tên mong muốn, đang lờ đi yêu cầu.\n"
 
-#: src/applications/gap/gap.c:1987
+#: src/applications/gap/gap.c:1995
 #, fuzzy
 msgid "# gap requests total received"
 msgstr "# nhận được yêu cầu theo vết trace p2p"
 
-#: src/applications/gap/gap.c:1988
+#: src/applications/gap/gap.c:1996
 msgid "# gap requests policy: immediate drop"
 msgstr ""
 
-#: src/applications/gap/gap.c:1989
+#: src/applications/gap/gap.c:1997
 msgid "# gap requests policy: not routed"
 msgstr ""
 
-#: src/applications/gap/gap.c:1990
+#: src/applications/gap/gap.c:1998
 msgid "# gap requests policy: not answered"
 msgstr ""
 
-#: src/applications/gap/gap.c:1991
+#: src/applications/gap/gap.c:1999
 msgid "# gap requests processed: attempted add to RT"
 msgstr ""
 
-#: src/applications/gap/gap.c:1992
+#: src/applications/gap/gap.c:2000
 msgid "# gap requests processed: local result"
 msgstr ""
 
-#: src/applications/gap/gap.c:1993
+#: src/applications/gap/gap.c:2001
 msgid "# gap routing successes (total)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1994
+#: src/applications/gap/gap.c:2002
 msgid "# gap requests dropped: collision in RT"
 msgstr ""
 
-#: src/applications/gap/gap.c:1995
+#: src/applications/gap/gap.c:2003
 msgid "# gap requests forwarded (counting each peer)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1996
+#: src/applications/gap/gap.c:2004
 msgid "# gap duplicate requests (pending)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1997
+#: src/applications/gap/gap.c:2005
 #, fuzzy
 msgid "# gap duplicate requests that were re-tried"
 msgstr "# nhận được yêu cầu theo vết trace p2p"
 
-#: src/applications/gap/gap.c:1998
+#: src/applications/gap/gap.c:2006
 msgid "# gap re-try ttl difference (cummulative)"
 msgstr ""
 
-#: src/applications/gap/gap.c:1999
+#: src/applications/gap/gap.c:2007
 msgid "# gap reply duplicates"
 msgstr ""
 
-#: src/applications/gap/gap.c:2000
+#: src/applications/gap/gap.c:2008
 msgid "# gap spurious replies"
 msgstr ""
 
-#: src/applications/gap/gap.c:2001
+#: src/applications/gap/gap.c:2009
 msgid "# gap routing slots currently in use"
 msgstr ""
 
-#: src/applications/gap/gap.c:2017
+#: src/applications/gap/gap.c:2025
 msgid ""
 "Traffic service failed to load; gap cannot ensure cover-traffic "
 "availability.\n"
@@ -1398,7 +1409,7 @@
 "Nạp dịch vụ truyền tải không thành công; lỗ hổng không thể chắc chắn khả "
 "năng truyền tải.\n"
 
-#: src/applications/gap/gap.c:2048
+#: src/applications/gap/gap.c:2056
 #, fuzzy, c-format
 msgid "`%s' registering handlers %d %d\n"
 msgstr "'%s' đăng ký trình điều khiển %d %d\n"
@@ -1654,8 +1665,8 @@
 #: src/applications/sqstore_sqlite/sqlite.c:51 src/util/hostkey_gcrypt.c:56
 #: src/util/hostkey_gcrypt.c:63 src/util/storage.c:643
 #: src/util/symcipher_gcrypt.c:47 src/util/symcipher_gcrypt.c:54
-#: src/include/gnunet_util.h:1030 src/include/gnunet_util.h:1037
-#: src/include/gnunet_util.h:1039
+#: src/include/gnunet_util.h:1033 src/include/gnunet_util.h:1040
+#: src/include/gnunet_util.h:1042
 #, fuzzy, c-format
 msgid "`%s' failed at %s:%d with error: %s\n"
 msgstr "'%s' thất bại tại %s:%d với lỗi: %s\n"
@@ -4001,7 +4012,7 @@
 msgid "RSA signature verification failed at %s:%d: %s\n"
 msgstr "Kiểm tra chữ ký RSA thất bại tại %s:%d: %s\n"
 
-#: src/util/initialize.c:231
+#: src/util/initialize.c:226
 msgid "Shutdown complete.\n"
 msgstr "Tắt xong.\n"
 
@@ -4236,7 +4247,7 @@
 msgid "Attempted path to `%s' was `%s'.\n"
 msgstr "Đường dẫn đã thử tới '%s' là '%s'.\n"
 
-#: src/util/xmalloc.c:71
+#: src/util/xmalloc.c:52
 #, c-format
 msgid "Unexpected very large allocation (%u bytes) at %s:%d!\n"
 msgstr "Không mong đợi một phân phối rất rộng (%u) tại %s:%d!\n"
@@ -4265,13 +4276,13 @@
 msgid "be verbose"
 msgstr "thông báo chi tiết"
 
-#: src/include/gnunet_util.h:625 src/include/gnunet_util.h:627
+#: src/include/gnunet_util.h:628 src/include/gnunet_util.h:630
 #, c-format
 msgid "Assertion failed at %s:%d.\n"
 msgstr "Xác nhận thất bại tại %s:%d.\n"
 
-#: src/include/gnunet_util.h:1046 src/include/gnunet_util.h:1048
-#: src/include/gnunet_util.h:1055
+#: src/include/gnunet_util.h:1049 src/include/gnunet_util.h:1051
+#: src/include/gnunet_util.h:1058
 #, fuzzy, c-format
 msgid "`%s' failed on file `%s' at %s:%d with error: %s\n"
 msgstr "'%s' thất bại trên tập tin'%s' tại %s:%d với lỗi: %s\n"

Modified: GNUnet/src/applications/fs/ecrs/directory.c
===================================================================
--- GNUnet/src/applications/fs/ecrs/directory.c 2006-04-02 04:08:42 UTC (rev 
2606)
+++ GNUnet/src/applications/fs/ecrs/directory.c 2006-04-02 04:14:43 UTC (rev 
2607)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2003, 2004 Christian Grothoff (and other contributing authors)
+     (C) 2003, 2004, 2006 Christian Grothoff (and other contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -180,7 +180,8 @@
   }
   ucs = MALLOC(sizeof(char*) * count);
   size = 8 + sizeof(unsigned int);
-  size += ECRS_sizeofMetaData(meta);
+  size += ECRS_sizeofMetaData(meta,
+                             ECRS_SERIALIZE_FULL);
 
   for (i=0;i<count;i++) {
     psize = size;
@@ -189,7 +190,8 @@
     GNUNET_ASSERT(ucs[i] != NULL);
     size += strlen(ucs[i]) + 1;
     size += sizeof(unsigned int);
-    size += ECRS_sizeofMetaData(fis[i].meta);
+    size += ECRS_sizeofMetaData(fis[i].meta,
+                               ECRS_SERIALIZE_FULL);
     align = (size / BLOCK_ALIGN_SIZE) * BLOCK_ALIGN_SIZE;
     if ( (psize < align) &&
         (size > align) ) {
@@ -209,7 +211,7 @@
   ret = ECRS_serializeMetaData(meta,
                               &(*data)[pos + sizeof(unsigned int)],
                               size - pos - sizeof(unsigned int),
-                              NO);
+                              ECRS_SERIALIZE_FULL);
   GNUNET_ASSERT(ret != SYSERR);
   ret = htonl(ret);
   memcpy(&(*data)[pos],
@@ -221,7 +223,8 @@
     psize = pos;
 
     pos += strlen(ucs[i]) + 1 +
-      ECRS_sizeofMetaData(fis[i].meta);
+      ECRS_sizeofMetaData(fis[i].meta,
+                         ECRS_SERIALIZE_FULL);
     pos += sizeof(unsigned int);
     align = (pos / BLOCK_ALIGN_SIZE) * BLOCK_ALIGN_SIZE;
     if ( (psize < align) &&
@@ -238,7 +241,7 @@
     ret = ECRS_serializeMetaData(fis[i].meta,
                                 &(*data)[pos + sizeof(unsigned int)],
                                 size - pos - sizeof(unsigned int),
-                                NO);
+                                ECRS_SERIALIZE_FULL);
     GNUNET_ASSERT(ret != SYSERR);
     ret = htonl(ret);
     memcpy(&(*data)[pos],

Modified: GNUnet/src/applications/fs/ecrs/download.c
===================================================================
--- GNUnet/src/applications/fs/ecrs/download.c  2006-04-02 04:08:42 UTC (rev 
2606)
+++ GNUnet/src/applications/fs/ecrs/download.c  2006-04-02 04:14:43 UTC (rev 
2607)
@@ -1099,7 +1099,7 @@
  * (min ttl until next job is ready) and re-schedule itself
  * accordingly!
  */
-static void processRequests(RequestManager * rm) {
+static cron_t processRequests(RequestManager * rm) {
   cron_t minSleep;
   cron_t now;
   cron_t delta;
@@ -1111,7 +1111,7 @@
   MUTEX_LOCK(&rm->lock);
   if (rm->requestListIndex == 0) {
     MUTEX_UNLOCK(&rm->lock);
-    return;
+    return 0;
   }
   cronTime(&now);
   pending = 0;
@@ -1162,7 +1162,7 @@
   if (minSleep < cronMILLIS * 100)
     minSleep = cronMILLIS * 100; /* maximum resolution: 100ms */
   MUTEX_UNLOCK(&rm->lock);
-  gnunet_util_sleep(minSleep);
+  return minSleep;
 }
 
 
@@ -1188,6 +1188,7 @@
   CommonCtx ctx;
   NodeClosure * top;
   FileIdentifier fid;
+  cron_t minSleep;
 
 #if DEBUG_DOWNLOAD
   LOG(LOG_DEBUG,
@@ -1242,9 +1243,14 @@
   addRequest(rm, top);
   while ( (OK == tt(ttClosure)) &&
          (rm->abortFlag == NO) &&
-         (rm->requestListIndex != 0) )
-    processRequests(rm);
-
+         (rm->requestListIndex != 0) ) {
+    minSleep = processRequests(rm);
+    if ( (OK == tt(ttClosure)) &&
+         (rm->abortFlag == NO) &&
+         (rm->requestListIndex != 0) ) 
+      gnunet_util_sleep(minSleep);
+  }
+  
   if ( (rm->requestListIndex == 0) &&
        (ctx.completed == ctx.total) &&
        (rm->abortFlag == NO) ) {

Modified: GNUnet/src/applications/fs/ecrs/keyspace.c
===================================================================
--- GNUnet/src/applications/fs/ecrs/keyspace.c  2006-04-02 04:08:42 UTC (rev 
2606)
+++ GNUnet/src/applications/fs/ecrs/keyspace.c  2006-04-02 04:14:43 UTC (rev 
2607)
@@ -146,7 +146,8 @@
     return SYSERR;
   }
 
-  mdsize = ECRS_sizeofMetaData(md);
+  mdsize = ECRS_sizeofMetaData(md,
+                              ECRS_SERIALIZE_PART);
   dstURI = ECRS_uriToString(dst);
   size = mdsize + sizeof(KBlock) + strlen(dstURI) + 1;
   if (size > MAX_KBLOCK_SIZE) {
@@ -162,7 +163,7 @@
     mdsize = ECRS_serializeMetaData(md,
                                    &((char*)&kb[1])[strlen(dstURI)+1],
                                    mdsize,
-                                   YES);
+                                   ECRS_SERIALIZE_PART);
     if (mdsize == -1) {
       BREAK();
       FREE(dstURI);
@@ -181,7 +182,7 @@
                  ECRS_serializeMetaData(md,
                                         &((char*)&kb[1])[strlen(dstURI)+1],
                                         mdsize,
-                                        NO));
+                                        ECRS_SERIALIZE_FULL));
   }
   value->size = htonl(sizeof(Datastore_Value) + size);
   value->type = htonl(K_BLOCK);

Modified: GNUnet/src/applications/fs/ecrs/meta.c
===================================================================
--- GNUnet/src/applications/fs/ecrs/meta.c      2006-04-02 04:08:42 UTC (rev 
2606)
+++ GNUnet/src/applications/fs/ecrs/meta.c      2006-04-02 04:14:43 UTC (rev 
2607)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2003, 2004, 2005 Christian Grothoff (and other contributing authors)
+     (C) 2003, 2004, 2005, 2006 Christian Grothoff (and other contributing 
authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -457,8 +457,12 @@
     }
 
     hdr->size = htonl(size);
-    pos = tryCompression((char*)&hdr[1],
-                         size - sizeof(MetaDataHeader));
+    if ((part & ECRS_SERIALIZE_NO_COMPRESS) == 0) {
+      pos = tryCompression((char*)&hdr[1],
+                          size - sizeof(MetaDataHeader));
+    } else {
+      pos = size - sizeof(MetaDataHeader);
+    }
     if (pos < size - sizeof(MetaDataHeader)) {
       hdr->version = htonl(HEADER_COMPRESSED);
       size = pos + sizeof(MetaDataHeader);
@@ -468,7 +472,7 @@
     FREE(hdr);
     hdr = NULL;
 
-    if (! part) {
+    if ((part & ECRS_SERIALIZE_PART) == 0) {
       return SYSERR; /* does not fit! */
     }
     /* partial serialization ok, try again with less meta-data */
@@ -500,8 +504,8 @@
  * serialized form.  The estimate MAY be higher
  * than what is strictly needed.
  */
-unsigned int ECRS_sizeofMetaData(const MetaData * md) {
-
+unsigned int ECRS_sizeofMetaData(const MetaData * md,
+                                int part) {
   MetaDataHeader * hdr;
   size_t size;
   size_t pos;
@@ -530,9 +534,12 @@
            len);
     pos += len;
   }
-
-  pos = tryCompression((char*)&hdr[1],
-                       size - sizeof(MetaDataHeader));
+  if ((part & ECRS_SERIALIZE_NO_COMPRESS) == 0) {
+    pos = tryCompression((char*)&hdr[1],
+                        size - sizeof(MetaDataHeader));
+  } else {
+    pos = size - sizeof(MetaDataHeader);
+  }
   if (pos < size - sizeof(MetaDataHeader))
     size = pos + sizeof(MetaDataHeader);
 

Modified: GNUnet/src/applications/fs/ecrs/metatest.c
===================================================================
--- GNUnet/src/applications/fs/ecrs/metatest.c  2006-04-02 04:08:42 UTC (rev 
2606)
+++ GNUnet/src/applications/fs/ecrs/metatest.c  2006-04-02 04:14:43 UTC (rev 
2607)
@@ -91,12 +91,13 @@
   if (i != ECRS_getMetaData(m, NULL, NULL))
     ABORT();
 
-  size = ECRS_sizeofMetaData(m);
+  size = ECRS_sizeofMetaData(m,
+                            ECRS_SERIALIZE_FULL);
   val = MALLOC(size);
   if (size != ECRS_serializeMetaData(m,
                                     val,
                                     size,
-                                    NO))
+                                    ECRS_SERIALIZE_FULL))
     ABORT();
   ECRS_freeMetaData(m);
   m = ECRS_deserializeMetaData(val,
@@ -139,12 +140,13 @@
                       q % EXTRACTOR_getHighestKeywordTypeNumber(),
                       txt);
   }
-  size = ECRS_sizeofMetaData(meta);
+  size = ECRS_sizeofMetaData(meta,
+                            ECRS_SERIALIZE_FULL);
   data = MALLOC(size * 4);
   if (size != ECRS_serializeMetaData(meta,
                                     data,
                                     size * 4,
-                                    NO))
+                                    ECRS_SERIALIZE_FULL))
     ABORT();
   FREE(data);
   return 0;

Modified: GNUnet/src/applications/fs/ecrs/metatest2.c
===================================================================
--- GNUnet/src/applications/fs/ecrs/metatest2.c 2006-04-02 04:08:42 UTC (rev 
2606)
+++ GNUnet/src/applications/fs/ecrs/metatest2.c 2006-04-02 04:14:43 UTC (rev 
2607)
@@ -46,12 +46,13 @@
                               EXTRACTOR_FILENAME,
                               "lib-link.m4"))
     ABORT();
-  size = ECRS_sizeofMetaData(m);
+  size = ECRS_sizeofMetaData(m,
+                            ECRS_SERIALIZE_FULL);
   val = MALLOC(size);
   if (size != ECRS_serializeMetaData(m,
                                     val,
                                     size,
-                                    NO))
+                                    ECRS_SERIALIZE_FULL))
     ABORT();
   ECRS_freeMetaData(m);
   m = ECRS_deserializeMetaData(val,

Modified: GNUnet/src/applications/fs/ecrs/namespace.c
===================================================================
--- GNUnet/src/applications/fs/ecrs/namespace.c 2006-04-02 04:08:42 UTC (rev 
2606)
+++ GNUnet/src/applications/fs/ecrs/namespace.c 2006-04-02 04:14:43 UTC (rev 
2607)
@@ -149,7 +149,8 @@
 
   /* create advertisements */
 
-  mdsize = ECRS_sizeofMetaData(meta);
+  mdsize = ECRS_sizeofMetaData(meta,
+                              ECRS_SERIALIZE_PART);
   size = mdsize + sizeof(NBlock);
   if (size > MAX_NBLOCK_SIZE) {
     size = MAX_NBLOCK_SIZE;
@@ -161,7 +162,7 @@
     mdsize = ECRS_serializeMetaData(meta,
                                    (char*)&nb[1],
                                    mdsize,
-                                   YES);
+                                   ECRS_SERIALIZE_PART);
     if (mdsize == -1) {
       BREAK();
       ECRS_deleteNamespace(name);
@@ -177,7 +178,7 @@
     ECRS_serializeMetaData(meta,
                           (char*)&nb[1],
                           mdsize,
-                          NO);
+                          ECRS_SERIALIZE_FULL);
   }
   value->size = htonl(sizeof(Datastore_Value) + size);
   value->type = htonl(N_BLOCK);
@@ -402,7 +403,8 @@
 
   /* THEN: construct SBlock */
   dstURI = ECRS_uriToString(dstU);
-  mdsize = ECRS_sizeofMetaData(md);
+  mdsize = ECRS_sizeofMetaData(md,
+                              ECRS_SERIALIZE_PART);
   size = mdsize + sizeof(SBlock) + strlen(dstURI) + 1;
   if (size > MAX_SBLOCK_SIZE) {
     size = MAX_SBLOCK_SIZE;
@@ -417,7 +419,7 @@
     mdsize = ECRS_serializeMetaData(md,
                                    &((char*)&sb[1])[strlen(dstURI)+1],
                                    mdsize,
-                                   YES);
+                                   ECRS_SERIALIZE_PART);
     if (mdsize == -1) {
       BREAK();
       FREE(dstURI);
@@ -435,7 +437,7 @@
     ECRS_serializeMetaData(md,
                           &((char*)&sb[1])[strlen(dstURI)+1],
                           mdsize,
-                          NO);
+                          ECRS_SERIALIZE_FULL);
   }
   value->size = htonl(sizeof(Datastore_Value) + size);
   value->type = htonl(S_BLOCK);

Modified: GNUnet/src/applications/fs/ecrs/search.c
===================================================================
--- GNUnet/src/applications/fs/ecrs/search.c    2006-04-02 04:08:42 UTC (rev 
2606)
+++ GNUnet/src/applications/fs/ecrs/search.c    2006-04-02 04:14:43 UTC (rev 
2607)
@@ -610,6 +610,10 @@
                          &ctx);
     }
     MUTEX_UNLOCK(&ctx.lock);
+    if (! ( (OK == tt(ttClosure)) &&
+           (timeout > now) &&
+           (ctx.aborted == NO) ) )
+      break;
     gnunet_util_sleep(100 * cronMILLIS);
     cronTime(&now);
   }

Modified: GNUnet/src/applications/fs/fsui/download.c
===================================================================
--- GNUnet/src/applications/fs/fsui/download.c  2006-04-02 04:08:42 UTC (rev 
2606)
+++ GNUnet/src/applications/fs/fsui/download.c  2006-04-02 04:14:43 UTC (rev 
2607)
@@ -463,6 +463,8 @@
        list->ctx->threadPoolSize);
 #endif
     list->signalTerminate = YES;
+    PTHREAD_KILL(&list->handle,
+                SIGALRM); /* terminate sleep */
     PTHREAD_JOIN(&list->handle,
                 &unused);
     list->ctx->activeDownloadThreads--;

Modified: GNUnet/src/applications/fs/fsui/file_info.c
===================================================================
--- GNUnet/src/applications/fs/fsui/file_info.c 2006-04-02 04:08:42 UTC (rev 
2606)
+++ GNUnet/src/applications/fs/fsui/file_info.c 2006-04-02 04:14:43 UTC (rev 
2607)
@@ -93,12 +93,13 @@
 
   if (NO == FSUI_trackStatus())
     return;
-  size = ECRS_sizeofMetaData(fi->meta);
+  size = ECRS_sizeofMetaData(fi->meta,
+                            ECRS_SERIALIZE_FULL);
   data = MALLOC(size);
   GNUNET_ASSERT(size == ECRS_serializeMetaData(fi->meta,
                                               data,
                                               size,
-                                              NO));
+                                              ECRS_SERIALIZE_FULL));
   size = htonl(size);
   suri = ECRS_uriToString(fi->uri);
   sem = createIPC();

Modified: GNUnet/src/applications/fs/fsui/fsui.c
===================================================================
--- GNUnet/src/applications/fs/fsui/fsui.c      2006-04-02 04:08:42 UTC (rev 
2606)
+++ GNUnet/src/applications/fs/fsui/fsui.c      2006-04-02 04:14:43 UTC (rev 
2607)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2001, 2002, 2003, 2004, 2005 Christian Grothoff (and other 
contributing authors)
+     (C) 2001, 2002, 2003, 2004, 2005, 2006 Christian Grothoff (and other 
contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -133,8 +133,8 @@
   for (i=0;i<ret->completedDownloadsCount;i++) {
     ret->completedDownloads[i]
       = readURI(fd);
-    if (ret->completedDownloads[i] == NULL)
-      ok = NO;
+    if (ret->completedDownloads[i] == NULL) 
+      ok = NO;    
   }
   if (NO == ok) {
     BREAK();
@@ -258,14 +258,11 @@
 
   fi->meta = NULL;
   fi->uri = NULL;
-  if (sizeof(unsigned int) !=
-      READ(fd,
-          &big,
-          sizeof(unsigned int))) {
+  READINT(size);
+  if (size > 1024 * 1024) {
     BREAK();
     return SYSERR;
   }
-  size = ntohl(big);
   buf = MALLOC(size);
   if (size != READ(fd,
                   buf,
@@ -292,25 +289,27 @@
     return SYSERR;
   }
   return OK;
+ ERR:
+  BREAK();
+  return SYSERR;
 }
 
 static void writeFileInfo(int fd,
                          const ECRS_FileInfo * fi) {
   unsigned int size;
-  unsigned int big;
   char * buf;
 
-  size = ECRS_sizeofMetaData(fi->meta);
+  size = ECRS_sizeofMetaData(fi->meta,
+                            ECRS_SERIALIZE_FULL | ECRS_SERIALIZE_NO_COMPRESS);
+  if (size > 1024 * 1024)
+    size = 1024 * 1024;
   buf = MALLOC(size);
   ECRS_serializeMetaData(fi->meta,
                         buf,
                         size,
-                        NO);
-  big = htonl(size);
+                        ECRS_SERIALIZE_PART | ECRS_SERIALIZE_NO_COMPRESS);
+  WRITEINT(fd, size);
   WRITE(fd,
-       &big,
-       sizeof(unsigned int));
-  WRITE(fd,
        buf,
        size);
   FREE(buf);

Modified: GNUnet/src/applications/fs/fsui/namespace_info.c
===================================================================
--- GNUnet/src/applications/fs/fsui/namespace_info.c    2006-04-02 04:08:42 UTC 
(rev 2606)
+++ GNUnet/src/applications/fs/fsui/namespace_info.c    2006-04-02 04:14:43 UTC 
(rev 2607)
@@ -59,14 +59,15 @@
   strcat(fn, namespaceName);
   FREE(fnBase);
 
-  size = ECRS_sizeofMetaData(meta);
+  size = ECRS_sizeofMetaData(meta,
+                            ECRS_SERIALIZE_FULL);
   tag = size + sizeof(int);
   buf = MALLOC(tag);
   ((int *) buf)[0] = htonl(ranking); /* ranking */
   GNUNET_ASSERT(size == ECRS_serializeMetaData(meta,
                                               &buf[sizeof(int)],
                                               size,
-                                              NO));
+                                              ECRS_SERIALIZE_FULL));
   writeFile(fn,
            buf,
            tag,
@@ -458,7 +459,8 @@
   struct UpdateData * buf;
 
   uri = ECRS_uriToString(fi->uri);
-  metaSize = ECRS_sizeofMetaData(fi->meta);
+  metaSize = ECRS_sizeofMetaData(fi->meta,
+                                ECRS_SERIALIZE_FULL);
   size = sizeof(struct UpdateData) + metaSize + strlen(uri) + 1;
   buf = MALLOC(size);
   buf->nextId = *nextId;
@@ -472,7 +474,7 @@
                ECRS_serializeMetaData(fi->meta,
                                       &((char*)&buf[1])[strlen(uri)+1],
                                       metaSize,
-                                      NO));
+                                      ECRS_SERIALIZE_FULL));
   FREE(uri);
   fn = getUpdateDataFilename(nsname,
                             thisId);

Modified: GNUnet/src/applications/fs/fsui/search.c
===================================================================
--- GNUnet/src/applications/fs/fsui/search.c    2006-04-02 04:08:42 UTC (rev 
2606)
+++ GNUnet/src/applications/fs/fsui/search.c    2006-04-02 04:14:43 UTC (rev 
2607)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2001, 2002, 2003, 2004 Christian Grothoff (and other contributing 
authors)
+     (C) 2001, 2002, 2003, 2004, 2006 Christian Grothoff (and other 
contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -291,6 +291,9 @@
     if (ECRS_equalsUri(uri,
                       pos->uri)) {
       pos->signalTerminate = YES;
+      /* send signal to terminate sleep! */
+      PTHREAD_KILL(&pos->handle,
+                  SIGALRM);
       PTHREAD_JOIN(&pos->handle,
                   &unused);
       ECRS_freeUri(pos->uri);

Modified: GNUnet/src/applications/fs/fsui/upload.c
===================================================================
--- GNUnet/src/applications/fs/fsui/upload.c    2006-04-02 04:08:42 UTC (rev 
2606)
+++ GNUnet/src/applications/fs/fsui/upload.c    2006-04-02 04:14:43 UTC (rev 
2607)
@@ -399,7 +399,7 @@
       event.data.UploadComplete.main_filename = utc->main_filename;
     } else {
       event.type = FSUI_upload_error;
-      event.data.message = _("Upload failed.\n");
+      event.data.message = _("Upload failed.");
     }
     if (utc->meta == NULL)
       utc->meta = ECRS_createMetaData();
@@ -436,14 +436,14 @@
 
     if (ret != OK) {
       event.type = FSUI_upload_error;
-      event.data.message = _("Upload failed.\n");
+      event.data.message = _("Upload failed.");
     } else { /* for success, uploadDirectory sends event already! */
       sendEvent = NO;
     }
     utc->filename = NULL;
   } else {
     event.type = FSUI_upload_error;
-    event.data.message = _("Cannot upload directory without using 
recursion.\n");
+    event.data.message = _("Cannot upload directory without using recursion.");
   }
   if (ret == OK) { /* publish top-level advertisements */
     fi.meta = utc->meta;

Modified: GNUnet/src/include/gnunet_ecrs_lib.h
===================================================================
--- GNUnet/src/include/gnunet_ecrs_lib.h        2006-04-02 04:08:42 UTC (rev 
2606)
+++ GNUnet/src/include/gnunet_ecrs_lib.h        2006-04-02 04:14:43 UTC (rev 
2607)
@@ -180,6 +180,16 @@
                         const char * filename,
                         EXTRACTOR_ExtractorList * extractors);
 
+/* = 0 */
+#define ECRS_SERIALIZE_FULL NO
+
+/* = 1 */
+#define ECRS_SERIALIZE_PART YES
+
+/* disallow compression (if speed is important) */
+#define ECRS_SERIALIZE_NO_COMPRESS 2
+
+
 /**
  * Serialize meta-data to target.
  *
@@ -199,8 +209,10 @@
 /**
  * Compute size of the meta-data in
  * serialized form.
+ * @part flags (partial ok, may compress?)
  */
-unsigned int ECRS_sizeofMetaData(const struct ECRS_MetaData * md);
+unsigned int ECRS_sizeofMetaData(const struct ECRS_MetaData * md,
+                                int part);
 
 /**
  * Deserialize meta-data.  Initializes md.

Modified: GNUnet/src/util/hashtable.c
===================================================================
--- GNUnet/src/util/hashtable.c 2006-04-02 04:08:42 UTC (rev 2606)
+++ GNUnet/src/util/hashtable.c 2006-04-02 04:14:43 UTC (rev 2607)
@@ -32,33 +32,35 @@
 #include "platform.h"
 
 typedef struct KeyValuePair {
-    void *key;
-    unsigned long keylen;
-    void *value;
-    unsigned long valuelen;
-    struct KeyValuePair *next;
+  void *key;
+  unsigned long keylen;
+  void *value;
+  unsigned long valuelen;
+  struct KeyValuePair *next;
 } KeyValuePair;
 
 typedef struct HashTable {
-    long numOfBuckets;
-    long numOfElements;
-    KeyValuePair **bucketArray;
-    float idealRatio, lowerRehashThreshold, upperRehashThreshold;
+  long numOfBuckets;
+  long numOfElements;
+  KeyValuePair **bucketArray;
+  float idealRatio;
+  float lowerRehashThreshold;
+  float upperRehashThreshold;
 } HashTable;
 
 static int isProbablePrime(long oddNumber) {
-    long i;
+  long i;
 
-    for (i=3; i<51; i+=2)
-        if (oddNumber == i)
-            return 1;
-        else if (oddNumber%i == 0)
-            return 0;
-
-    return 1; /* maybe */
+  for (i=3; i<51; i+=2)
+    if (oddNumber == i)
+      return 1;
+    else if (oddNumber%i == 0)
+      return 0;
+  
+  return 1; /* maybe */
 }
 
-static long calculateIdealNumOfBuckets(struct HashTable *hashTable) {
+static long calculateIdealNumOfBuckets(const struct HashTable *hashTable) {
     long idealNumOfBuckets = hashTable->numOfElements / hashTable->idealRatio;
     if (idealNumOfBuckets < 5)
         idealNumOfBuckets = 5;
@@ -129,7 +131,7 @@
     for (i=0; i < hashTable->numOfBuckets; i++) {
         KeyValuePair *pair = hashTable->bucketArray[i];
         while (pair != NULL) {
-            KeyValuePair *nextPair = (KeyValuePair *) pair->next;
+           KeyValuePair *nextPair = pair->next;
             FREE(pair->key);
             FREE(pair->value);
             FREE(pair);
@@ -148,7 +150,9 @@
  * @return whether or not the specified HashTable contains the
  *         specified key
  */
-int ht_containsKey(const struct HashTable *hashTable, const void *key, const 
unsigned int keylen) {
+int ht_containsKey(const struct HashTable *hashTable, 
+                  const void *key, 
+                  const unsigned int keylen) {
     void *ret;
     unsigned int retlen;
     
@@ -162,14 +166,16 @@
  * @return whether or not the specified HashTable contains the
  *         specified value
  */
-int ht_containsValue(const struct HashTable *hashTable, const void *value, 
const unsigned int valuelen) {
+int ht_containsValue(const struct HashTable *hashTable, 
+                    const void *value, 
+                    const unsigned int valuelen) {
     int i;
 
     for (i=0; i<hashTable->numOfBuckets; i++) {
         KeyValuePair *pair = hashTable->bucketArray[i];
         while (pair != NULL) {
-            if (pair->valuelen == valuelen && memcmp(value, pair->value,
-              valuelen) == 0)
+         if ( (pair->valuelen == valuelen) && 
+              (memcmp(value, pair->value, valuelen) == 0) )
                 return 1;
             pair = pair->next;
         }
@@ -185,8 +191,11 @@
  * @param value the value associated with the key
  * @return YES if successful, NO if an error was encountered
  */
-int ht_put(struct HashTable *hashTable, const void *key, const unsigned int 
keylen,
-  void *value, const unsigned int valuelen) {
+int ht_put(struct HashTable *hashTable, 
+          const void *key, 
+          const unsigned int keylen,
+          void *value, 
+          const unsigned int valuelen) {
     long hashValue;
     KeyValuePair *pair;
 
@@ -210,7 +219,7 @@
         pair->valuelen = valuelen;
     }
     else {
-        KeyValuePair *newPair = (KeyValuePair *) MALLOC(sizeof(KeyValuePair));
+        KeyValuePair *newPair = MALLOC(sizeof(KeyValuePair));
         if (newPair == NULL)
             return NO;
         else {
@@ -244,8 +253,11 @@
  * @param valuelen the length of the value
  * @return YES if found, NO otherwise
  */
-int ht_get(const struct HashTable *hashTable, const void *key, const unsigned 
int
-  keylen, void **value, unsigned int *valuelen) {
+int ht_get(const struct HashTable *hashTable, 
+          const void *key, 
+          const unsigned int keylen,
+          void **value,
+          unsigned int *valuelen) {
     long hashValue = weakHash(key, keylen) % hashTable->numOfBuckets;
     KeyValuePair *pair = hashTable->bucketArray[hashValue];
 
@@ -266,7 +278,9 @@
  * @param hashTable the HashTable to remove the key/value pair from
  * @param key the key specifying the key/value pair to be removed
  */
-void ht_remove(struct HashTable *hashTable, const void *key, const unsigned 
int keylen) {
+void ht_remove(struct HashTable *hashTable, 
+              const void *key,
+              const unsigned int keylen) {
     long hashValue = weakHash(key, keylen) % hashTable->numOfBuckets;
     KeyValuePair *pair = hashTable->bucketArray[hashValue];
     KeyValuePair *previousPair = NULL;
@@ -414,8 +428,10 @@
  *                     is considered unacceptably high, a value of 0.0 can
  *                     be specified.
  */
-void ht_setIdealRatio(struct HashTable *hashTable, float idealRatio,
-        float lowerRehashThreshold, float upperRehashThreshold) {
+void ht_setIdealRatio(struct HashTable *hashTable, 
+                     float idealRatio,
+                     float lowerRehashThreshold, 
+                     float upperRehashThreshold) {
 
     if (idealRatio <= 0.0 || lowerRehashThreshold >= idealRatio ||
           (upperRehashThreshold != 0.0 || upperRehashThreshold <= idealRatio))

Modified: GNUnet/src/util/hashtabletest.c
===================================================================
--- GNUnet/src/util/hashtabletest.c     2006-04-02 04:08:42 UTC (rev 2606)
+++ GNUnet/src/util/hashtabletest.c     2006-04-02 04:14:43 UTC (rev 2607)
@@ -1,3 +1,22 @@
+/*
+     This file is part of GNUnet.
+     (C) 2006 Christian Grothoff (and other contributing authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 2, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
 /**
  * @file util/hashtabletest.c
  * @brief testcase for util/hashtable.c

Modified: GNUnet/src/util/initialize.c
===================================================================
--- GNUnet/src/util/initialize.c        2006-04-02 04:08:42 UTC (rev 2606)
+++ GNUnet/src/util/initialize.c        2006-04-02 04:14:43 UTC (rev 2607)
@@ -29,10 +29,6 @@
 #include "locking_gcrypt.h"
 
 /* internal prototypes... */
-void initXmalloc();
-
-void doneXmalloc();
-
 void initKBlockKey();
 
 void doneKBlockKey();
@@ -197,7 +193,6 @@
   gnunet_util_initIO();
   initLockingGcrypt();
   initRAND();
-  initXmalloc();
   initKBlockKey();
   initConfiguration();
   if (argc > 0)
@@ -236,7 +231,6 @@
 #endif
   doneKBlockKey();
   doneLockingGcrypt();
-  doneXmalloc();
   gnunet_util_doneIO();
 }
 

Modified: GNUnet/src/util/xmalloc.c
===================================================================
--- GNUnet/src/util/xmalloc.c   2006-04-02 04:08:42 UTC (rev 2606)
+++ GNUnet/src/util/xmalloc.c   2006-04-02 04:14:43 UTC (rev 2607)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2001, 2002, 2003, 2005 Christian Grothoff (and other contributing 
authors)
+     (C) 2001, 2002, 2003, 2005, 2006 Christian Grothoff (and other 
contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -27,25 +27,6 @@
 #include "gnunet_util.h"
 #include "platform.h"
 
-#define DEBUG_MALLOC 0
-
-#if DEBUG_MALLOC
-static Mutex lock;
-#endif
-
-
-void initXmalloc() {
-#if DEBUG_MALLOC
-  MUTEX_CREATE(&lock);
-#endif
-}
-
-void doneXmalloc() {
-#if DEBUG_MALLOC
-  MUTEX_DESTROY(&lock);
-#endif
-}
-
 #ifndef INT_MAX
 #define INT_MAX 0x7FFFFFFF
 #endif
@@ -80,16 +61,6 @@
 
   GNUNET_ASSERT(size < INT_MAX);
   result = malloc(size);
-#if DEBUG_MALLOC
-  MUTEX_LOCK(&lock);
-  printf("%p malloc %s:%d (%d bytes)\n",
-        result,
-        filename,
-        linenumber,
-        size);
-  fflush(stdout);
-  MUTEX_UNLOCK(&lock);
-#endif
   if (result == NULL)
     DIE_STRERROR_FL(filename, linenumber, "malloc");
   memset(result, 0, size); /* client code should not rely on this, though... */
@@ -109,34 +80,13 @@
  * @return pointer to size bytes of memory
  */
 void * xrealloc_(void * ptr,
-      const size_t n,
-      const char * filename,
-      const int linenumber) {
-#if DEBUG_MALLOC
-  MUTEX_LOCK(&lock);
-  printf("%p free %s:%d\n",
-   ptr,
-   filename,
-   linenumber);
-  MUTEX_UNLOCK(&lock);
-#endif
-
+                const size_t n,
+                const char * filename,
+                const int linenumber) {
   ptr = realloc(ptr, n);
 
   if (!ptr)
     DIE_STRERROR_FL(filename, linenumber, "realloc");
-
-#if DEBUG_MALLOC
-  MUTEX_LOCK(&lock);
-  printf("%p malloc %s:%d (%d bytes)\n",
-   ptr,
-   filename,
-   linenumber,
-   n);
-  fflush(stdout);
-  MUTEX_UNLOCK(&lock);
-#endif
-
   return ptr;
 }
 
@@ -153,15 +103,6 @@
            const int linenumber) {
   GNUNET_ASSERT_FL(ptr != NULL,
                   filename, linenumber);
-#if DEBUG_MALLOC
-  MUTEX_LOCK(&lock);
-  printf("%p free %s:%d\n",
-        ptr,
-        filename,
-        linenumber);
-  fflush(stdout);
-  MUTEX_UNLOCK(&lock);
-#endif
   free(ptr);
 }
 
@@ -263,6 +204,4 @@
   *oldCount = newCount;
 }
 
-
-
 /* end of xmalloc.c */

Modified: GNUnet-docs/WWW/user_gnunet.php3
===================================================================
--- GNUnet-docs/WWW/user_gnunet.php3    2006-04-02 04:08:42 UTC (rev 2606)
+++ GNUnet-docs/WWW/user_gnunet.php3    2006-04-02 04:14:43 UTC (rev 2607)
@@ -25,7 +25,11 @@
        extlink_("/libextractor/", "libextractor")));
 W("libextractor has itself various mandatory and optional dependencies.");
 W("Please check the dependency list, both GNUnet and libextractor contain a 
file README.debian that lists the current package dependencies for Debian.");
+W("Note that in addition to satisfying the dependencies, you might have to 
make sure that development headers for the various libraries are also 
installed.");
 W("There maybe files for other distributions, or you might be able to find 
equivalent packages for your distribution.");
+W("If you are <tt>root</tt> and cannot find binary packages, you should 
install GNUnet and libextractor to <tt>/usr/local</tt> and run <tt>gnunetd</tt> 
as a special administrative user <tt>gnunet</tt>.");
+W("For that, change <tt>\$HOME</tt> in the instructions below to 
<tt>/usr/local</tt>.");
+W("The instructions below work when installing GNUnet as an ordinary user on 
most GNU/Linux systems.");
 W("Installing libextractor should be as simple as:");
 EP();
 PRE("$ ./configure --prefix=\$HOME\n" .

Modified: gnunet-gtk/ChangeLog
===================================================================
--- gnunet-gtk/ChangeLog        2006-04-02 04:08:42 UTC (rev 2606)
+++ gnunet-gtk/ChangeLog        2006-04-02 04:14:43 UTC (rev 2607)
@@ -1,3 +1,6 @@
+Sat Apr  1 16:24:27 PST 2006
+       Improved shutdown code.
+
 Sat Mar 25 10:14:44 PST 2006
        Adding .desktop support.
 

Modified: gnunet-gtk/README
===================================================================
--- gnunet-gtk/README   2006-04-02 04:08:42 UTC (rev 2606)
+++ gnunet-gtk/README   2006-04-02 04:14:43 UTC (rev 2607)
@@ -2,25 +2,16 @@
 this code, you need to first install the main GNUnet codebase.  
 
 Then you may need to tell configure where the GNUnet installation
-is located:
+is located.  The following command will install gnunet-gtk in the
+$HOME directory.
 
 $ ./configure --prefix=$HOME --with-gnunet=$GNUNET_PREFIX
 
 gnunet-gtk requires GTK 2.6 or higher and libglade 2.5.1 or higher.
 glade-2.10 is used to edit the UI.  Debian users please note that
-these versions are currently only available in experimental (!).
+these versions are currently only available in unstable.
  
-This software is currently alpha quality: 
-* we're using glade for the first time
-* we're shipping gnunet-gtk seperately from GNUnet
-  for the first time
-* the UI code was largely rewritten
-* the GNUnet core was largely rewritten
 
-So, please don't expect everything to just work and report bugs (or
-better, send patches :-)).
-
-
 Stay tuned
 ==========
 

Modified: gnunet-gtk/TODO
===================================================================
--- gnunet-gtk/TODO     2006-04-02 04:08:42 UTC (rev 2606)
+++ gnunet-gtk/TODO     2006-04-02 04:14:43 UTC (rev 2607)
@@ -10,7 +10,7 @@
 - highlight active downloads in search list [ easy ]
 
 0.7.2:
-- various minor memory leaks (see FIXME in search.c,
+- various minor memory leaks (see
   #if 0 code in namespace.c)
 
 0.7.3:

Modified: gnunet-gtk/src/plugins/fs/namespace.c
===================================================================
--- gnunet-gtk/src/plugins/fs/namespace.c       2006-04-02 04:08:42 UTC (rev 
2606)
+++ gnunet-gtk/src/plugins/fs/namespace.c       2006-04-02 04:14:43 UTC (rev 
2607)
@@ -265,7 +265,11 @@
                         -1);
       ECRS_freeUri(uri);
       ECRS_freeMetaData(meta);
-
+      gtk_list_store_set(GTK_LIST_STORE(model),
+                        &iter,
+                        NAMESPACE_URI, NULL,
+                        NAMESPACE_META, NULL,
+                        -1);
     } while (gtk_list_store_remove(GTK_LIST_STORE(model),
                                   &iter));
   }

Modified: gnunet-gtk/src/plugins/fs/search.c
===================================================================
--- gnunet-gtk/src/plugins/fs/search.c  2006-04-02 04:08:42 UTC (rev 2606)
+++ gnunet-gtk/src/plugins/fs/search.c  2006-04-02 04:14:43 UTC (rev 2607)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2005 Christian Grothoff (and other contributing authors)
+     (C) 2005, 2006 Christian Grothoff (and other contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -192,8 +192,6 @@
       freeIterSubtree(tree, &child);
   } while (gtk_tree_model_iter_next(tree,
                                    iter));
-
-                               
 }
 
 /**
@@ -1025,6 +1023,36 @@
                    NULL);
 }
 
+static void freeSearchModel(GtkTreeModel * model,
+                           GtkTreeIter * parent) {
+  struct ECRS_URI * u;
+  struct ECRS_MetaData * m;
+  GtkTreeIter iter;
+
+  if (gtk_tree_model_iter_children(model,
+                                  &iter,
+                                  parent)) {
+    do {
+      gtk_tree_model_get(model,
+                        &iter,
+                        SEARCH_URI, &u,
+                        SEARCH_META, &m,
+                        -1);
+      gtk_tree_store_set(GTK_TREE_STORE(model),
+                        &iter,
+                        SEARCH_URI, NULL,
+                        SEARCH_META, NULL,
+                        -1);
+      if (u != NULL)
+       ECRS_freeUri(u);
+      if (m != NULL)
+       ECRS_freeMetaData(m);
+      freeSearchModel(model, &iter);
+    } while (gtk_tree_model_iter_next(model,
+                                     &iter));
+  }  
+}
+
 void fs_search_stop() {
   SearchList * list;
   GtkTreeIter iter;
@@ -1037,33 +1065,7 @@
     list = head;
     head = head->next;
     ECRS_freeUri(list->uri);
-
-#if 0
-  /* FIXME - memory leak.  The following is still incorrect;
-     it does not free entire tree (need to recurse!)
-  */
-    if (gtk_tree_model_get_iter_first(head->model,
-                                     &iter)) {
-      struct ECRS_MetaData * m;
-      do {
-       gtk_tree_model_get(head->model,
-                          &iter,
-                          SEARCH_URI, &u,
-                          SEARCH_META, &m,
-                          -1);
-       gtk_tree_store_set(GTK_TREE_STORE(head->model),
-                          &iter,
-                          SEARCH_URI, NULL,
-                          SEARCH_META, NULL,
-                          -1);
-       if (u != NULL)
-         ECRS_freeUri(u);
-       if (m != NULL)
-         ECRS_freeMetaData(m);
-      } while (gtk_tree_model_iter_next(head->model,
-                                       &iter));
-    }
-#endif
+    freeSearchModel(list->model, NULL);
     FREE(list);
   }
 

Modified: gnunet-gtk/src/plugins/fs/upload.c
===================================================================
--- gnunet-gtk/src/plugins/fs/upload.c  2006-04-02 04:08:42 UTC (rev 2606)
+++ gnunet-gtk/src/plugins/fs/upload.c  2006-04-02 04:14:43 UTC (rev 2607)
@@ -502,19 +502,19 @@
                                              "value", UPLOAD_PROGRESS,
                                              NULL);
   
gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(uploadList),
-                                              col - 1),
-                                              TRUE);
+                                                             col - 1),
+                                    TRUE);
   renderer = gtk_cell_renderer_text_new();
   col = gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(uploadList),
-                                             -1,
-                                             _("URI"),
-                                             renderer,
-                                             "text", UPLOAD_URISTRING,
-                                             NULL);
+                                                   -1,
+                                                   _("URI"),
+                                                   renderer,
+                                                   "text", UPLOAD_URISTRING,
+                                                   NULL);
   
gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(uploadList),
-                                              col - 1),
-                                              TRUE);
-
+                                                             col - 1),
+                                    TRUE);
+  
   uploadEntry
     = glade_xml_get_widget(getMainXML(),
                           "uploadFilenameComboBoxEntry");

Modified: i18nHTML/src/commitMassTranslation.php
===================================================================
--- i18nHTML/src/commitMassTranslation.php      2006-04-02 04:08:42 UTC (rev 
2606)
+++ i18nHTML/src/commitMassTranslation.php      2006-04-02 04:14:43 UTC (rev 
2607)
@@ -22,8 +22,8 @@
   echo "Database is down. Cannot edit translations.";
   die();
 }
-if ($xlang == "English") {
-  W("Translating to English currently not allowed.\n");
+if ($lang == $i18nHTMLsrcLang) {
+  W("Translating to " . $i18nHTMLsrcLang . " currently not allowed.\n");
   die();
 }
 DOCTYPE("HTML", "Transitional");
@@ -41,7 +41,7 @@
     continue;
   }
   $val = fix($val);
-  $query = "SELECT c FROM ".$i18nHTMLsqlPrefix."pending WHERE lang=\"$xlang\"";
+  $query = "SELECT c FROM ".$i18nHTMLsqlPrefix."pending WHERE lang=\"$lang\"";
   $result = mysql_query($query, $connection);
   $num = 0;
   if ($result)

Modified: i18nHTML/src/commitTranslation.php
===================================================================
--- i18nHTML/src/commitTranslation.php  2006-04-02 04:08:42 UTC (rev 2606)
+++ i18nHTML/src/commitTranslation.php  2006-04-02 04:14:43 UTC (rev 2607)
@@ -22,11 +22,11 @@
   echo "Database is down. Cannot edit translations.";
   die();
 }
-if ($xlang == "English") {
-  W("Translating to English is not allowed.\n");
+if ($lang == $i18nHTMLsrcLang) {
+  W("Translating to " . $i18nHTMLsrcLang . " is not allowed.\n");
   die();
 }
-if (strstr($xlang, "@")) {
+if (strstr($lang, "@")) {
   W("Invalid language.\n");
   die();
 }
@@ -37,8 +37,8 @@
 
 $back            = $_REQUEST['back'];
 // check for identical translation
-$query = "SELECT ranking,translation FROM ".$i18nHTMLsqlPrefix."map WHERE 
name=\"$text_sql\"" .
-  " AND lang=\"$lang\"";
+$query = "SELECT ranking,translation FROM " . $i18nHTMLsqlPrefix . 
+         "map WHERE name=\"$text_sql\" AND lang=\"$lang\"";
 
 $result = mysql_query($query, $connection);
 $num = 0;
@@ -76,11 +76,12 @@
       W("Also, a single displayed %% sign must be translated into two (%%%%) 
such signs.");
       echo "</body></html>";
   } else {
-    $query = "INSERT INTO ".$i18nHTMLsqlPrefix."map VALUES(\"$text_sql\", 
\"$lang\", " .
+    $query = "INSERT INTO " . $i18nHTMLsqlPrefix . "map VALUES(\"$text_sql\", 
\"$lang\", " .
              "\"$translation_sql\", $max+1, \"" . $_SERVER['REMOTE_ADDR'] . 
"\");";
     $result = mysql_query($query, $connection);
     if ($result) {
-      $query = "DELETE FROM ".$i18nHTMLsqlPrefix."pending WHERE lang=\"$lang\" 
AND c=\"$text_sql\"";
+      $query = "DELETE FROM " . $i18nHTMLsqlPrefix . 
+               "pending WHERE lang=\"$lang\" AND c=\"$text_sql\"";
       mysql_query($query, $connection);
       header("Location: " . $back); /* Redirect browser */
     } else {

Modified: i18nHTML/src/editor.php
===================================================================
--- i18nHTML/src/editor.php     2006-04-02 04:08:42 UTC (rev 2606)
+++ i18nHTML/src/editor.php     2006-04-02 04:14:43 UTC (rev 2607)
@@ -27,14 +27,14 @@
 TITLE("WWW translation");
 echo "</head><body>";
 generateLanguageBar();
-if ( (! $xlang) || ($xlang == "English") ) {
-  echo "Cannot translate to English.";
+if ( (! $lang) || ($lang == $i18nHTMLsrcLang) ) {
+  echo "Cannot translate to " . $i18nHTMLsrcLang . ".";
   die();
  }
 $start = $_REQUEST['start'];
 if (! $start)
   $start = 0;
-H2("Mass translation to %s", $xlang);
+H2("Mass translation to %s", $lang);
 W("This page is for translating lots of sentences at once.");
 W("The sentences are ordered by the frequency that they are requested by 
users.");
 $max = 10; /* apache limits! */

Modified: i18nHTML/src/i18nhtml.inc.php
===================================================================
--- i18nHTML/src/i18nhtml.inc.php       2006-04-02 04:08:42 UTC (rev 2606)
+++ i18nHTML/src/i18nhtml.inc.php       2006-04-02 04:14:43 UTC (rev 2607)
@@ -1,6 +1,6 @@
 <?php
 /*
-     (C) 2003, 2004, 2005 Christian Grothoff and other contributing authors.
+     (C) 2003, 2004, 2005, 2006 Christian Grothoff and other contributing 
authors.
 
      This code is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -42,9 +42,9 @@
 //   die('PHP misconfigured.  Disable get_magic_quotes.');
 
 // establish default connection to database server
-$connection = @mysql_connect($i18nHTMLsqlServer,
-                            $i18nHTMLsqlUser,
-                            $i18nHTMLsqlPass);
+$connection = mysql_connect($i18nHTMLsqlServer,
+                           $i18nHTMLsqlUser,
+                           $i18nHTMLsqlPass);
 if (!$connection) {
    die ('Failure connecting to ' . $i18nHTMLsqlServer . ' : ' . mysql_error());
 }
@@ -116,7 +116,7 @@
 }
 // If no language is specified, use english.
 if ( (! $lang) || ($lang=="") )
-  $lang = "English";
+  $lang = $i18nHTMLsrcLang;
 $xlang = $_REQUEST['xlang'];
 if ($xlang)
   $lang = $xlang;
@@ -192,9 +192,8 @@
       . $lang
       . "&amp;text=" . urlencode(fix($a))
       . "&amp;back=" . urlencode($back)
-      . "\" title=\""
-      .fix($a)
-      ."\">" . $i18nHTMLmarker . "</a>\n";
+      . "\" title=\"" . fix($a)
+      . "\">" . $i18nHTMLmarker . "</a>\n";
   } else
     return "";
 }
@@ -589,7 +588,7 @@
     return $a;
   }
 
-  if ("English" == $lang) {
+  if ($i18nHTMLsrcLang == $lang) {
     // no need to translate english, that's the
     // hard-wired source language!
     if ($i18nHTMLrecordMode == 2) {
@@ -608,7 +607,8 @@
     return $a;
   }
   // attempt to get translations, ranked for best
-  $query = "SELECT translation FROM ".$i18nHTMLsqlPrefix."map WHERE 
name=\"$a_sql\" AND lang=\"$lang\" ORDER BY ranking DESC";
+  $query = "SELECT translation FROM " . $i18nHTMLsqlPrefix . 
+           "map WHERE name=\"$a_sql\" AND lang=\"$lang\" ORDER BY ranking 
DESC";
   $result = mysql_query($query, $connection);
   $num = 0;
   if ($result)
@@ -618,7 +618,8 @@
       // either insert untranslated item into pending table or update
       // referenced count; count is used to display more used strings
       // during mass translation before less common ones.
-      $query = "SELECT count FROM ".$i18nHTMLsqlPrefix."pending WHERE 
c=\"$a_sql\" AND lang=\"$lang\"";
+      $query = "SELECT count FROM " . $i18nHTMLsqlPrefix . 
+               "pending WHERE c=\"$a_sql\" AND lang=\"$lang\"";
       $result = mysql_query($query, $connection);
       $num = 0;
       if ($result)
@@ -627,9 +628,11 @@
       if ($num > 0) {
         $row = mysql_fetch_array($result);
         $count = $row["count"] + 1;
-        $query = "UPDATE ".$i18nHTMLsqlPrefix."pending SET count=$count WHERE 
c=\"$a_sql\" AND lang=\"$lang\"";
+        $query = "UPDATE " . $i18nHTMLsqlPrefix . 
+                 "pending SET count=$count WHERE c=\"$a_sql\" AND 
lang=\"$lang\"";
       } else {
-        $query = "INSERT INTO ".$i18nHTMLsqlPrefix."pending VALUES(\"$a_sql\", 
\"$lang\", 1)";
+        $query = "INSERT INTO " . $i18nHTMLsqlPrefix . 
+                 "pending VALUES(\"$a_sql\", \"$lang\", 1)";
       }
       mysql_query($query, $connection);
 
@@ -734,11 +737,13 @@
     $mode = "Transitional";
   }
   if ($type == "XHTML1")
-    echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 " . $mode . "//EN\" 
\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-"; . $dtd . ".dtd\">\n";
+    echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 " . $mode . 
+         "//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-"; . $dtd . 
".dtd\">\n";
   else if ($type == "XHTML1.1")
     echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" 
\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\";>\n";
   else
-    echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " . $mode . "//EN\" 
\"http://www.w3.org/TR/html4/"; . $dtd . ".dtd\">\n";
+    echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " . $mode . 
+         "//EN\" \"http://www.w3.org/TR/html4/"; . $dtd . ".dtd\">\n";
 }
 
 function TITLE($a,$b="") {
@@ -767,10 +772,10 @@
     $num = 0;
     if ($result)
       $num = mysql_numrows($result);
-    echo "<a href=\"?xlang=English\">";
-    W("English");
+    echo "<a href=\"?xlang=" . $i18nHTMLsrcLang . "\">";
+    W($i18nHTMLsrcLang);
     echo "</a>";
-    $last = "English";
+    $last = $i18nHTMLsrcLang;
     for ($i=0;$i<$num;$i++) {
       $row = mysql_fetch_array($result);
       $next = $row["lang"];
@@ -794,8 +799,8 @@
   global $HTTP_SERVER_VARS;
 
   P();
-  echo "Translation engine based on <a 
href=\"http://gnunet.org/i18nHTML/\";>i18nHTML</a> (C) 2003, 2004, 2005 <a 
href=\"http://grothoff.org/christian/\";>Christian Grothoff</a>.<br />\n";
-  if ( ($xlang) && ($xlang != "English") ) {
+  echo "Translation engine based on <a 
href=\"http://gnunet.org/i18nHTML/\";>i18nHTML</a> (C) 2003, 2004, 2005, 2006 <a 
href=\"http://grothoff.org/christian/\";>Christian Grothoff</a>.<br />\n";
+  if ( ($lang) && ($lang != $i18nHTMLsrcLang) ) {
     $protocol = "http";
     if ($HTTP_SERVER_VARS["HTTPS"] == "on") {
        $protocol = "https"; // switch to https

Modified: i18nHTML/src/i18nhtml_config.inc.php
===================================================================
--- i18nHTML/src/i18nhtml_config.inc.php        2006-04-02 04:08:42 UTC (rev 
2606)
+++ i18nHTML/src/i18nhtml_config.inc.php        2006-04-02 04:14:43 UTC (rev 
2607)
@@ -32,5 +32,7 @@
 $i18nHTMLmarker = "*";  // default value if never changed
 
 $i18nHTMLsqlPrefix = ""; // use this if you want to have a prefix for the SQL 
table names used by i18nHTML
+$i18nHTMLsrcLang = "English";
 
+
 ?>

Modified: i18nHTML/src/start.php
===================================================================
--- i18nHTML/src/start.php      2006-04-02 04:08:42 UTC (rev 2606)
+++ i18nHTML/src/start.php      2006-04-02 04:14:43 UTC (rev 2607)
@@ -13,16 +13,16 @@
 W("Just view the pages in your language and click on the &quot;*&quot; after a 
sentence to translate it.");
 W("You can start a new language by adding <tt>lang=LANGUAGE</tt> after the 
<tt>.php3</tt> in the URL.");
 W("The translations incorporate a voting system, the highest ranked 
translation is displayed.");
-W("English is always the source language.");
+W($i18nHTMLsrcLang . " is always the source language.");
 W("Only developers can change the source, contact them if you find problems.");
 W("On the translation page, you find all other translations.");
 W("You can also vote for a specific translation by clicking on the respective 
sentence.");
 W("You are allowed to vote multiple times for the same sentence, e.g. to 
express strong feelings. :-)");
 W("The system logs your IP and allows the administrator to easily undo all 
operations that were performed from a certain IP address.");
-if ($xlang && ($xlang != "English") ) {
+if ($lang != $i18nHTMLsrcLang) {
   W("You can translate the most commonly requested untranslated sentences for 
your language using the %s.",
     intlink_("editor.php", "mass translation page"));
- }
+}
 
 generateFooter();
 echo "</body></html>\n";

Modified: i18nHTML/src/status.php
===================================================================
--- i18nHTML/src/status.php     2006-04-02 04:08:42 UTC (rev 2606)
+++ i18nHTML/src/status.php     2006-04-02 04:14:43 UTC (rev 2607)
@@ -1,6 +1,6 @@
 <?php
 /*
-     (C) 2003, 2004, 2005 Christian Grothoff
+     (C) 2003, 2004, 2005, 2006 Christian Grothoff
 
      This code is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -31,18 +31,20 @@
 echo "<html><head>\n";
 TITLE("Translation: status");
 echo "</head><body>";
+BP();
 W("Language setting is %s.",
   $lang);
 P();
-$query = "SELECT count FROM ".$i18nHTMLsqlPrefix."pending WHERE 
lang=\"English\"";
+$query = "SELECT count FROM " . $i18nHTMLsqlPrefix . 
+         "pending WHERE lang=\"" . $i18nHTMLsrcLang . "\"";
 $result = mysql_query($query, $connection);
 $num = 0;
 if ($result)
   $num = mysql_numrows($result);
-W("Sentences in the original English text: %s",
+W("Sentences in the original " . $i18nHTMLsrcLang . " text: %s",
   $num);
-P();
-if ($mode == 1) {
+EP();
+if ($mode == 1) {  
   H2("All available translations");
   echo "<table border='5'>\n";
   echo "<tr>";
@@ -53,7 +55,7 @@
   echo "</tr>\n";
 }
 $stats = ARRAY();
-$query = "SELECT name,ranking,translation,lang FROM ".$i18nHTMLsqlPrefix."map";
+$query = "SELECT name,ranking,translation,lang FROM " . $i18nHTMLsqlPrefix . 
"map";
 $result = mysql_query($query, $connection);
 $num = 0;
 if ($result)
@@ -78,16 +80,20 @@
 }
 if ($mode == 1) {
   echo "</table>";
-  P();
   HR();
-  P();
 }
+BP();
 W("%s translated sentences in database.", $num);
-P();
+EP();
+echo "<center><table border=5>\n";
+echo "<tr>";
+TH("Language");
+TH("Translations");
+echo "</tr>";
 foreach ($stats as $a => $b) {
-  W("%s translations available in %s.", ARRAY($b, $a));
-  BR();
+  printf("<tr><td>%s</td><td>%s</td></tr>\n", $a, $b);
 }
+echo "</table></center>\n";
 generateFooter();
 echo "</body></html>";
-?>
\ No newline at end of file
+?>

Modified: i18nHTML/src/translate.php
===================================================================
--- i18nHTML/src/translate.php  2006-04-02 04:08:42 UTC (rev 2606)
+++ i18nHTML/src/translate.php  2006-04-02 04:14:43 UTC (rev 2607)
@@ -33,8 +33,8 @@
 TRANSLATE("Help translating this webpage.");
 echo "\">";
 echo "</head><body>";
-if ($lang == "English") {
-  echo "Cannot translate to English.";
+if ($lang == $i18nHTMLsrcLang) {
+  echo "Cannot translate to " . $i18nHTMLsrcLang ".";
   die();
  }
 H2("Original Text");





reply via email to

[Prev in Thread] Current Thread [Next in Thread]