gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r18601 - gnunet/src/util
Date: Thu, 15 Dec 2011 13:44:23 +0100

Author: grothoff
Date: 2011-12-15 13:44:23 +0100 (Thu, 15 Dec 2011)
New Revision: 18601

Modified:
   gnunet/src/util/container_bloomfilter.c
Log:
only try to read bf from disk if we didn't just create the file

Modified: gnunet/src/util/container_bloomfilter.c
===================================================================
--- gnunet/src/util/container_bloomfilter.c     2011-12-15 12:41:18 UTC (rev 
18600)
+++ gnunet/src/util/container_bloomfilter.c     2011-12-15 12:44:23 UTC (rev 
18601)
@@ -457,6 +457,7 @@
   int i;
   size_t ui;
   off_t fsize;
+  int must_read;
 
   GNUNET_assert (NULL != filename);
   if ((k == 0) || (size == 0))
@@ -473,30 +474,45 @@
   /* Try to open a bloomfilter file */
   bf->fh =
       GNUNET_DISK_file_open (filename,
-                             GNUNET_DISK_OPEN_READWRITE |
-                             GNUNET_DISK_OPEN_CREATE,
+                             GNUNET_DISK_OPEN_READWRITE,
                              GNUNET_DISK_PERM_USER_READ |
                              GNUNET_DISK_PERM_USER_WRITE);
   if (NULL == bf->fh)
   {
-    GNUNET_free (bf);
-    return NULL;
+    /* file did not exist, don't read */
+    must_read = GNUNET_NO;
+    bf->fh =
+      GNUNET_DISK_file_open (filename,
+                             GNUNET_DISK_OPEN_CREATE |
+                             GNUNET_DISK_OPEN_READWRITE,
+                             GNUNET_DISK_PERM_USER_READ |
+                             GNUNET_DISK_PERM_USER_WRITE);
+    if (NULL == bf->fh)
+      {
+       GNUNET_free (bf);
+       return NULL;
+      }
   }
-  if (GNUNET_OK !=
-      GNUNET_DISK_file_handle_size (bf->fh, &fsize))
+  else
   {
-    GNUNET_DISK_file_close (bf->fh);
-    GNUNET_free (bf);
-    return NULL;
+    /* file existed, try to read it! */
+    must_read = GNUNET_YES;
+    if (GNUNET_OK !=
+       GNUNET_DISK_file_handle_size (bf->fh, &fsize))
+    {
+      GNUNET_DISK_file_close (bf->fh);
+      GNUNET_free (bf);
+      return NULL;
+    }
+    if (fsize != size * 8LL)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                 _("Size of file on disk is incorrect for this Bloom 
filter\n"));
+      GNUNET_DISK_file_close (bf->fh);
+      GNUNET_free (bf);
+      return NULL;
+    }
   }
-  if (fsize != size * 8LL)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               _("Size of file on disk is incorrect for this Bloom filter\n"));
-    GNUNET_DISK_file_close (bf->fh);
-    GNUNET_free (bf);
-    return NULL;
-  }
   bf->filename = GNUNET_strdup (filename);
   /* Alloc block */
   bf->bitArray = GNUNET_malloc_large (size);
@@ -512,6 +528,8 @@
   bf->addressesPerElement = k;
   memset (bf->bitArray, 0, bf->bitArraySize);
 
+  if (GNUNET_YES != must_read)
+    return bf; /* already done! */
   /* Read from the file what bits we can */
   rbuff = GNUNET_malloc (BUFFSIZE);
   pos = 0;




reply via email to

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