indentation
[oweals/gnunet.git] / src / fs / gnunet-directory.c
index 0cbf700d1f32a4b20303ccb89fc77d671fb4eb61..a6fa4266422b0b176e233f725310baa7708067c2 100644 (file)
@@ -4,7 +4,7 @@
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
 
      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
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
@@ -29,16 +29,38 @@ static int ret;
 
 /**
  * Print a meta data entry.
 
 /**
  * Print a meta data entry.
+ *
+ * @param cls closure (unused)
+ * @param plugin_name name of the plugin that generated the meta data
+ * @param type type of the keyword
+ * @param format format of data
+ * @param data_mime_type mime type of data
+ * @param data value of the meta data
+ * @param data_size number of bytes in data
+ * @return always 0 (to continue iterating)
  */
 static int
 item_printer (void *cls,
  */
 static int
 item_printer (void *cls,
-             EXTRACTOR_KeywordType type, 
-             const char *data)
+              const char *plugin_name,
+              enum EXTRACTOR_MetaType type,
+              enum EXTRACTOR_MetaFormat format,
+              const char *data_mime_type, const char *data, size_t data_size)
 {
 {
+  if (type == EXTRACTOR_METATYPE_GNUNET_FULL_DATA)
+  {
+    printf (_("\t<original file embedded in %u bytes of meta data>\n"),
+            (unsigned int) data_size);
+    return 0;
+  }
+  if ((format != EXTRACTOR_METAFORMAT_UTF8) &&
+      (format != EXTRACTOR_METAFORMAT_C_STRING))
+    return 0;
+  if (type == EXTRACTOR_METATYPE_GNUNET_ORIGINAL_FILENAME)
+    return 0;
   printf ("\t%20s: %s\n",
           dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN,
   printf ("\t%20s: %s\n",
           dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN,
-                    EXTRACTOR_getKeywordTypeAsString (type)), data);
-  return GNUNET_OK;
+                    EXTRACTOR_metatype_to_string (type)), data);
+  return 0;
 }
 
 
 }
 
 
@@ -49,7 +71,7 @@ item_printer (void *cls,
  * @param cls closure (not used)
  * @param filename name of the file in the directory
  * @param uri URI of the file
  * @param cls closure (not used)
  * @param filename name of the file in the directory
  * @param uri URI of the file
- * @param metadata metadata for the file; metadata for
+ * @param meta metadata for the file; metadata for
  *        the directory if everything else is NULL/zero
  * @param length length of the available data for the file
  *           (of type size_t since data must certainly fit
  *        the directory if everything else is NULL/zero
  * @param length length of the available data for the file
  *           (of type size_t since data must certainly fit
@@ -60,20 +82,31 @@ item_printer (void *cls,
  */
 static void
 print_entry (void *cls,
  */
 static void
 print_entry (void *cls,
-            const char *filename,
-            const struct GNUNET_FS_Uri *uri,
-            const struct GNUNET_CONTAINER_MetaData *meta,
-            size_t length,
-            const void *data)
+             const char *filename,
+             const struct GNUNET_FS_Uri *uri,
+             const struct GNUNET_CONTAINER_MetaData *meta,
+             size_t length, const void *data)
 {
   char *string;
 {
   char *string;
-
+  char *name;
+
+  name = GNUNET_CONTAINER_meta_data_get_by_type (meta,
+                                                 EXTRACTOR_METATYPE_GNUNET_ORIGINAL_FILENAME);
+  if (uri == NULL)
+  {
+    printf (_("Directory `%s' meta data:\n"), name);
+    GNUNET_CONTAINER_meta_data_iterate (meta, &item_printer, NULL);
+    printf ("\n");
+    printf (_("Directory `%s' contents:\n"), name);
+    GNUNET_free (name);
+    return;
+  }
   string = GNUNET_FS_uri_to_string (uri);
   string = GNUNET_FS_uri_to_string (uri);
-  printf ("%s:\n", string);
+  printf ("%s (%s):\n", name, string);
   GNUNET_free (string);
   GNUNET_free (string);
-  GNUNET_CONTAINER_meta_data_get_contents (meta,
-                                          &item_printer,
-                                          NULL);
+  GNUNET_CONTAINER_meta_data_iterate (meta, &item_printer, NULL);
+  printf ("\n");
+  GNUNET_free (name);
 }
 
 
 }
 
 
@@ -81,70 +114,55 @@ print_entry (void *cls,
  * Main function that will be run by the scheduler.
  *
  * @param cls closure
  * Main function that will be run by the scheduler.
  *
  * @param cls closure
- * @param sched the scheduler to use
  * @param args remaining command-line arguments
  * @param cfgfile name of the configuration file used (for saving, can be NULL!)
  * @param cfg configuration
  */
 static void
 run (void *cls,
  * @param args remaining command-line arguments
  * @param cfgfile name of the configuration file used (for saving, can be NULL!)
  * @param cfg configuration
  */
 static void
 run (void *cls,
-     struct GNUNET_SCHEDULER_Handle *sched,
      char *const *args,
      char *const *args,
-     const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *cfg)
+     const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   struct GNUNET_DISK_MapHandle *map;
   struct GNUNET_DISK_FileHandle *h;
   void *data;
   size_t len;
   uint64_t size;
 {
   struct GNUNET_DISK_MapHandle *map;
   struct GNUNET_DISK_FileHandle *h;
   void *data;
   size_t len;
   uint64_t size;
-  const char *filename = args[0];
-
-  if (NULL == filename)
-    {
-      fprintf (stderr,
-              _("You must specify a filename to inspect."));
-      ret = 1;
-      return;
-    }
-  if ( (GNUNET_OK !=
-       GNUNET_DISK_file_size (filename,
-                              &size,
-                              GNUNET_YES)) ||
-       (NULL == (h = GNUNET_DISK_file_open (filename,
-                                           GNUNET_DISK_OPEN_READ))) )
+  const char *filename;
+  int i;
+
+  if (NULL == args[0])
+  {
+    fprintf (stderr, _("You must specify a filename to inspect."));
+    ret = 1;
+    return;
+  }
+  i = 0;
+  while (NULL != (filename = args[i++]))
+  {
+    if ((GNUNET_OK !=
+         GNUNET_DISK_file_size (filename,
+                                &size,
+                                GNUNET_YES)) ||
+        (NULL == (h = GNUNET_DISK_file_open (filename,
+                                             GNUNET_DISK_OPEN_READ,
+                                             GNUNET_DISK_PERM_NONE))))
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                 _("Failed to read directory `%s'\n"),
-                 filename);
+                  _("Failed to read directory `%s'\n"), filename);
       ret = 1;
       ret = 1;
-      return;
+      continue;
     }
     }
-  len = (size_t) size;
-  data = GNUNET_DISK_file_map (h,
-                              &map,
-                              GNUNET_DISK_MAP_READ,
-                              len);
-  GNUNET_assert (NULL != data);
-  GNUNET_FS_directory_list_contents (len,
-                                    data,
-                                    0, 
-                                    &print_entry,
-                                    NULL);
-  GNUNET_DISK_file_unmap (map);
-  GNUNET_DISK_file_close (h);
+    len = (size_t) size;
+    data = GNUNET_DISK_file_map (h, &map, GNUNET_DISK_MAP_TYPE_READ, len);
+    GNUNET_assert (NULL != data);
+    GNUNET_FS_directory_list_contents (len, data, 0, &print_entry, NULL);
+    printf ("\n");
+    GNUNET_DISK_file_unmap (map);
+    GNUNET_DISK_file_close (h);
+  }
 }
 
 }
 
-
-/**
- * gnunet-directory command line options
- */
-static struct GNUNET_GETOPT_CommandLineOption options[] = {
-  // FIXME: options!
-  GNUNET_GETOPT_OPTION_END
-};
-
-
 /**
  * The main function to inspect GNUnet directories.
  *
 /**
  * The main function to inspect GNUnet directories.
  *
@@ -155,12 +173,15 @@ static struct GNUNET_GETOPT_CommandLineOption options[] = {
 int
 main (int argc, char *const *argv)
 {
 int
 main (int argc, char *const *argv)
 {
+  static struct GNUNET_GETOPT_CommandLineOption options[] = {
+    GNUNET_GETOPT_OPTION_END
+  };
   return (GNUNET_OK ==
           GNUNET_PROGRAM_run (argc,
                               argv,
   return (GNUNET_OK ==
           GNUNET_PROGRAM_run (argc,
                               argv,
-                              "gnunet-directory",
+                              "gnunet-directory [OPTIONS] FILENAME",
                               gettext_noop
                               gettext_noop
-                              ("Display GNUnet directories."),
+                              ("Display contents of a GNUnet directory"),
                               options, &run, NULL)) ? ret : 1;
 }
 
                               options, &run, NULL)) ? ret : 1;
 }