return if directory is well-formed
authorChristian Grothoff <christian@grothoff.org>
Sun, 27 Jun 2010 11:50:00 +0000 (11:50 +0000)
committerChristian Grothoff <christian@grothoff.org>
Sun, 27 Jun 2010 11:50:00 +0000 (11:50 +0000)
TODO
src/fs/fs_directory.c
src/include/gnunet_fs_service.h

diff --git a/TODO b/TODO
index 3d97e60e313cf3d77b609d5dc5c24c7bb1a02300..bafbcbb00ec55996c1d996e3693a09380fee3ebd 100644 (file)
--- a/TODO
+++ b/TODO
@@ -8,13 +8,14 @@
     [On W32, we need to select after calling socket before doing connect etc.]
 * GNUNET-GTK: [CG]
   - from-URI only tab:
-    + display from open directory (needs 'from-URI only' tab!)
-    + handle download lost-parent (move to 'from-URI only' tab!)
+    + display from open directory
   - recursive downloads:
     + download start: recursive/directory (!)
-      * display directory content from download as part of search
+      * display directory content as part of 'open directory'
+      * display directory content from download as part of search       
       * honor recursion option (may already be done, check!)
   - TEST download-start from-URI only in event handler
+  - TEST download lost-parent 
 
 * BUGS:
   Jun 27 11:51:54 core-7670 ERROR Assertion failed at gnunet-service-core.c:3616.
index de100c33990232014070b66ab4140d99c9b8beef..03065958e20413e83db4c70282821aaf64ec388d 100644 (file)
@@ -179,8 +179,11 @@ find_full_data (void *cls,
  * @param offset offset of data in the directory
  * @param dep function to call on each entry
  * @param dep_cls closure for dep
+ * @return GNUNET_OK if this could be a block in a directory,
+ *         GNUNET_NO if this could be part of a directory (but not 100% OK)
+ *         GNUNET_SYSERR if 'data' does not represent a directory
  */
-void 
+int 
 GNUNET_FS_directory_list_contents (size_t size,
                                   const void *data,
                                   uint64_t offset,
@@ -209,16 +212,16 @@ GNUNET_FS_directory_list_contents (size_t size,
        {
          /* invalid size */
          GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                     _("Not a GNUnet directory.\n"));
-         return;
+                     _("MAGIC mismatch.  This is not a GNUnet directory.\n"));
+         return GNUNET_SYSERR;
        }
       md = GNUNET_CONTAINER_meta_data_deserialize (&cdata[8 +
                                                         sizeof (uint32_t)],
                                                   mdSize);
       if (md == NULL)
         {
-          GNUNET_break (0);
-          return; /* malformed ! */
+         GNUNET_break (0);
+          return GNUNET_SYSERR; /* malformed ! */
         }
       dep (dep_cls,
           NULL,
@@ -254,7 +257,7 @@ GNUNET_FS_directory_list_contents (size_t size,
       while ((epos < size) && (cdata[epos] != '\0'))
         epos++;
       if (epos >= size)
-        return;   /* malformed - or partial download */
+        return GNUNET_NO;   /* malformed - or partial download */
       
       uri = GNUNET_FS_uri_parse (&cdata[pos], &emsg);
       pos = epos + 1;
@@ -268,7 +271,7 @@ GNUNET_FS_directory_list_contents (size_t size,
         {
           GNUNET_FS_uri_destroy (uri);
           GNUNET_break (0);
-          return; /* illegal in directory! */
+          return GNUNET_NO; /* illegal in directory! */
         }
 
       memcpy (&mdSize, &cdata[pos], sizeof (uint32_t));
@@ -277,7 +280,7 @@ GNUNET_FS_directory_list_contents (size_t size,
       if (pos + mdSize > size)
         {
           GNUNET_FS_uri_destroy (uri);
-          return; /* malformed - or partial download */
+          return GNUNET_NO; /* malformed - or partial download */
         }
 
       md = GNUNET_CONTAINER_meta_data_deserialize (&cdata[pos], mdSize);
@@ -285,7 +288,7 @@ GNUNET_FS_directory_list_contents (size_t size,
         {
           GNUNET_FS_uri_destroy (uri);
           GNUNET_break (0);
-          return; /* malformed ! */
+          return GNUNET_NO; /* malformed ! */
         }
       pos += mdSize;
       filename = GNUNET_CONTAINER_meta_data_get_by_type (md,
@@ -309,6 +312,7 @@ GNUNET_FS_directory_list_contents (size_t size,
       GNUNET_CONTAINER_meta_data_destroy (md);
       GNUNET_FS_uri_destroy (uri);
     }
+  return GNUNET_OK;
 }
 
 /**
index 09ae3682a03ddc5d269be4cf019548edb2e327d8..9495731ea0ea0eea55f2960864e06cbdbcbf68ba 100644 (file)
@@ -2602,8 +2602,11 @@ typedef void (*GNUNET_FS_DirectoryEntryProcessor)(void *cls,
  * @param offset offset of data in the directory
  * @param dep function to call on each entry
  * @param dep_cls closure for dep
+ * @return GNUNET_OK if this could be a block in a directory,
+ *         GNUNET_NO if this could be part of a directory (but not 100% OK)
+ *         GNUNET_SYSERR if 'data' does not represent a directory
  */
-void 
+int 
 GNUNET_FS_directory_list_contents (size_t size,
                                   const void *data,
                                   uint64_t offset,