gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r18647 - gnunet/src/util


From: gnunet
Subject: [GNUnet-SVN] r18647 - gnunet/src/util
Date: Fri, 16 Dec 2011 22:19:27 +0100

Author: grothoff
Date: 2011-12-16 22:19:27 +0100 (Fri, 16 Dec 2011)
New Revision: 18647

Modified:
   gnunet/src/util/container_bloomfilter.c
Log:
cleaning up bloomfilter code and disk file size tests

Modified: gnunet/src/util/container_bloomfilter.c
===================================================================
--- gnunet/src/util/container_bloomfilter.c     2011-12-16 19:18:12 UTC (rev 
18646)
+++ gnunet/src/util/container_bloomfilter.c     2011-12-16 21:19:27 UTC (rev 
18647)
@@ -282,33 +282,33 @@
  * @return GNUNET_OK if created ok, GNUNET_SYSERR otherwise
  */
 static int
-makeEmptyFile (const struct GNUNET_DISK_FileHandle *fh, size_t size)
+make_empty_file (const struct GNUNET_DISK_FileHandle *fh, size_t size)
 {
-  char *buffer;
+  char buffer[BUFFSIZE];
   size_t bytesleft = size;
   int res = 0;
 
   if (GNUNET_DISK_handle_invalid (fh))
     return GNUNET_SYSERR;
-  buffer = GNUNET_malloc (BUFFSIZE);
-  memset (buffer, 0, BUFFSIZE);
+  memset (buffer, 0, sizeof (buffer));
   GNUNET_DISK_file_seek (fh, 0, GNUNET_DISK_SEEK_SET);
-
   while (bytesleft > 0)
   {
-    if (bytesleft > BUFFSIZE)
+    if (bytesleft > sizeof (buffer))
     {
-      res = GNUNET_DISK_file_write (fh, buffer, BUFFSIZE);
-      bytesleft -= BUFFSIZE;
+      res = GNUNET_DISK_file_write (fh, buffer, sizeof (buffer));
+      if (res >= 0)
+       bytesleft -= res;
     }
     else
     {
       res = GNUNET_DISK_file_write (fh, buffer, bytesleft);
-      bytesleft = 0;
+      if (res >= 0)
+       bytesleft -= res;
     }
-    GNUNET_assert (res != GNUNET_SYSERR);
+    if (GNUNET_SYSERR == res)
+      return GNUNET_SYSERR;
   }
-  GNUNET_free (buffer);
   return GNUNET_OK;
 }
 
@@ -472,7 +472,8 @@
 
   bf = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_BloomFilter));
   /* Try to open a bloomfilter file */
-  bf->fh =
+  if (GNUNET_YES == GNUNET_DISK_file_test (filename))
+    bf->fh =
       GNUNET_DISK_file_open (filename,
                              GNUNET_DISK_OPEN_READWRITE,
                              GNUNET_DISK_PERM_USER_READ |
@@ -492,6 +493,14 @@
        GNUNET_free (bf);
        return NULL;
       }
+    if (GNUNET_OK != make_empty_file (bf->fh, size * 4LL))
+    {
+      GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING,
+                          "write");
+      GNUNET_DISK_file_close (bf->fh);
+      GNUNET_free (bf);
+      return NULL;
+    }
   }
   else
   {
@@ -504,10 +513,12 @@
       GNUNET_free (bf);
       return NULL;
     }
-    if (fsize != size * 8LL)
+    if (fsize != size * 4LL)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                 _("Size of file on disk is incorrect for this Bloom 
filter\n"));
+                 _("Size of file on disk is incorrect for this Bloom filter 
(want %llu, have %llu)\n"),
+                 (unsigned long long) fsize,
+                 (unsigned long long) (size * 4LL));
       GNUNET_DISK_file_close (bf->fh);
       GNUNET_free (bf);
       return NULL;
@@ -528,8 +539,8 @@
   bf->addressesPerElement = k;
   memset (bf->bitArray, 0, bf->bitArraySize);
 
-  if (GNUNET_YES != must_read)
-    return bf; /* already done! */
+  if (GNUNET_YES != must_read)      
+    return bf; /* already done! */  
   /* Read from the file what bits we can */
   rbuff = GNUNET_malloc (BUFFSIZE);
   pos = 0;
@@ -670,7 +681,7 @@
 
   memset (bf->bitArray, 0, bf->bitArraySize);
   if (bf->filename != NULL)
-    makeEmptyFile (bf->fh, bf->bitArraySize * 4);
+    make_empty_file (bf->fh, bf->bitArraySize * 4LL);
 }
 
 
@@ -827,7 +838,7 @@
   bf->bitArray = GNUNET_malloc (size);
   memset (bf->bitArray, 0, bf->bitArraySize);
   if (bf->filename != NULL)
-    makeEmptyFile (bf->fh, bf->bitArraySize * 4);
+    make_empty_file (bf->fh, bf->bitArraySize * 4LL);
   while (GNUNET_YES == iterator (iterator_cls, &hc))
     GNUNET_CONTAINER_bloomfilter_add (bf, &hc);
 }




reply via email to

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