-fix ftbfs if extractor.h present but libextractor.so missing
[oweals/gnunet.git] / src / fs / fs_getopt.c
index edabcd06cb0c150fd52f3a95537868ae3a888843..8657c62dee1159c304911fc771db6a46d67f4b60 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 GNUnet e.V.
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -14,8 +14,8 @@
 
      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.
+     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+     Boston, MA 02110-1301, USA.
 */
 
 /**
@@ -25,7 +25,7 @@
  */
 #include "platform.h"
 #include "gnunet_fs_service.h"
-#include "fs.h"
+#include "fs_api.h"
 
 /* ******************** command-line option parsing API ******************** */
 
  * @return GNUNET_OK on success
  */
 int
-GNUNET_FS_getopt_set_keywords (struct GNUNET_GETOPT_CommandLineProcessorContext* ctx, 
-                                        void *scls,
-                                        const char *option,
-                                        const char *value)
+GNUNET_FS_getopt_set_keywords (struct GNUNET_GETOPT_CommandLineProcessorContext
+                               *ctx, void *scls, const char *option,
+                               const char *value)
 {
   struct GNUNET_FS_Uri **uri = scls;
   struct GNUNET_FS_Uri *u = *uri;
@@ -53,60 +52,58 @@ GNUNET_FS_getopt_set_keywords (struct GNUNET_GETOPT_CommandLineProcessorContext*
   size_t slen;
 
   if (u == NULL)
-    {
-      u = GNUNET_malloc (sizeof (struct GNUNET_FS_Uri));
-      *uri = u;
-      u->type = ksk;
-      u->data.ksk.keywordCount = 0;
-      u->data.ksk.keywords = NULL;
-    }
+  {
+    u = GNUNET_new (struct GNUNET_FS_Uri);
+    *uri = u;
+    u->type = GNUNET_FS_URI_KSK;
+    u->data.ksk.keywordCount = 0;
+    u->data.ksk.keywords = NULL;
+  }
   else
-    {
-      GNUNET_assert (u->type == ksk);
-    }
+  {
+    GNUNET_assert (u->type == GNUNET_FS_URI_KSK);
+  }
   slen = strlen (value);
   if (slen == 0)
     return GNUNET_SYSERR;       /* cannot be empty */
   if (value[0] == '+')
+  {
+    /* simply preserve the "mandatory" flag */
+    if (slen < 2)
+      return GNUNET_SYSERR;     /* empty keywords not allowed */
+    if ((value[1] == '"') && (slen > 3) && (value[slen - 1] == '"'))
     {
-      /* simply preserve the "mandatory" flag */
-      if (slen < 2)
-        return GNUNET_SYSERR;   /* empty keywords not allowed */
-      if ((value[1] == '"') && (slen > 3) && (value[slen - 1] == '"'))
-        {
-          /* remove the quotes, keep the '+' */
-          val = GNUNET_malloc (slen - 1);
-          val[0] = '+';
-          memcpy (&val[1], &value[2], slen - 3);
-          val[slen - 2] = '\0';
-        }
-      else
-        {
-          /* no quotes, just keep the '+' */
-          val = GNUNET_strdup (value);
-        }
+      /* remove the quotes, keep the '+' */
+      val = GNUNET_malloc (slen - 1);
+      val[0] = '+';
+      memcpy (&val[1], &value[2], slen - 3);
+      val[slen - 2] = '\0';
     }
+    else
+    {
+      /* no quotes, just keep the '+' */
+      val = GNUNET_strdup (value);
+    }
+  }
   else
+  {
+    if ((value[0] == '"') && (slen > 2) && (value[slen - 1] == '"'))
+    {
+      /* remove the quotes, add a space */
+      val = GNUNET_malloc (slen);
+      val[0] = ' ';
+      memcpy (&val[1], &value[1], slen - 2);
+      val[slen - 1] = '\0';
+    }
+    else
     {
-      if ((value[0] == '"') && (slen > 2) && (value[slen - 1] == '"'))
-        {
-          /* remove the quotes, add a space */
-          val = GNUNET_malloc (slen);
-          val[0] = ' ';
-          memcpy (&val[1], &value[1], slen - 2);
-          val[slen - 1] = '\0';
-        }
-      else
-        {
-          /* add a space to indicate "not mandatory" */
-          val = GNUNET_malloc (slen + 2);
-          strcpy (val, " ");
-          strcat (val, value);
-        }
+      /* add a space to indicate "not mandatory" */
+      val = GNUNET_malloc (slen + 2);
+      strcpy (val, " ");
+      strcat (val, value);
     }
-  GNUNET_array_append (u->data.ksk.keywords,
-                      u->data.ksk.keywordCount,
-                      val);
+  }
+  GNUNET_array_append (u->data.ksk.keywords, u->data.ksk.keywordCount, val);
   return GNUNET_OK;
 }
 
@@ -121,87 +118,85 @@ GNUNET_FS_getopt_set_keywords (struct GNUNET_GETOPT_CommandLineProcessorContext*
  * @param scls must be of type "struct GNUNET_MetaData **"
  * @param option name of the option (typically 'k')
  * @param value command line argument given
- * @return GNUNET_OK on success
+ * @return #GNUNET_OK on success
  */
 int
-GNUNET_FS_getopt_set_metadata (struct GNUNET_GETOPT_CommandLineProcessorContext* ctx, 
-                                        void *scls,
-                                        const char *option,
-                                        const char *value)
-
+GNUNET_FS_getopt_set_metadata (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx,
+                               void *scls,
+                               const char *option,
+                               const char *value)
 {
   struct GNUNET_CONTAINER_MetaData **mm = scls;
+#if HAVE_EXTRACTOR_H && HAVE_LIBEXTRACTOR
   enum EXTRACTOR_MetaType type;
   const char *typename;
   const char *typename_i18n;
+#endif
   struct GNUNET_CONTAINER_MetaData *meta;
   char *tmp;
 
   meta = *mm;
   if (meta == NULL)
-    {
-      meta = GNUNET_CONTAINER_meta_data_create ();
-      *mm = meta;
-    }
+  {
+    meta = GNUNET_CONTAINER_meta_data_create ();
+    *mm = meta;
+  }
 
-  tmp = GNUNET_STRINGS_to_utf8 (value, strlen (value),
-#if ENABLE_NLS
-                               nl_langinfo (CODESET)
-#else
-                               "utf-8"
-#endif
-    );
+  /* Use GNUNET_STRINGS_get_utf8_args() in main() to acquire utf-8-encoded
+   * commandline arguments, so that the following line is not needed.
+   */
+  /*tmp = GNUNET_STRINGS_to_utf8 (value, strlen (value), locale_charset ());*/
+  tmp = GNUNET_strdup (value);
+#if HAVE_EXTRACTOR_H && HAVE_LIBEXTRACTOR
   type = EXTRACTOR_metatype_get_max ();
   while (type > 0)
+  {
+    type--;
+    typename = EXTRACTOR_metatype_to_string (type);
+    typename_i18n = dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN, typename);
+    if ((strlen (tmp) >= strlen (typename) + 1) &&
+        (tmp[strlen (typename)] == ':') &&
+        (0 == strncmp (typename, tmp, strlen (typename))))
     {
-      type--;
-      typename = EXTRACTOR_metatype_to_string (type);
-      typename_i18n = dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN, typename);
-      if ((strlen (tmp) >= strlen (typename) + 1) &&
-          (tmp[strlen (typename)] == ':') &&
-          (0 == strncmp (typename, tmp, strlen (typename))))
-        {
-          GNUNET_CONTAINER_meta_data_insert (meta, 
-                                            "<gnunet>",
-                                            type,
-                                            EXTRACTOR_METAFORMAT_UTF8,
-                                            "text/plain",
-                                            &tmp[strlen (typename) + 1],
-                                            strlen (&tmp[strlen (typename) + 1])+1);
-          GNUNET_free (tmp);
-          tmp = NULL;
-          break;
-        }
-      if ((strlen (tmp) >= strlen (typename_i18n) + 1) &&
-          (tmp[strlen (typename_i18n)] == ':') &&
-          (0 == strncmp (typename_i18n, tmp, strlen (typename_i18n))))
-        {
-          GNUNET_CONTAINER_meta_data_insert (meta,
-                                            "<gnunet>",
-                                            type,
-                                            EXTRACTOR_METAFORMAT_UTF8,
-                                            "text/plain",
-                                            &tmp[strlen (typename_i18n) + 1],
-                                            strlen (&tmp[strlen (typename_i18n) + 1]) + 1);
-          GNUNET_free (tmp);
-          tmp = NULL;
-          break;
-        }
+      GNUNET_CONTAINER_meta_data_insert (meta, "<gnunet>", type,
+                                         EXTRACTOR_METAFORMAT_UTF8,
+                                         "text/plain",
+                                         &tmp[strlen (typename) + 1],
+                                         strlen (&tmp[strlen (typename) + 1]) +
+                                         1);
+      GNUNET_free (tmp);
+      tmp = NULL;
+      break;
     }
-  if (tmp != NULL)
+    if ((strlen (tmp) >= strlen (typename_i18n) + 1) &&
+        (tmp[strlen (typename_i18n)] == ':') &&
+        (0 == strncmp (typename_i18n, tmp, strlen (typename_i18n))))
     {
-      GNUNET_CONTAINER_meta_data_insert (meta, 
-                                        "<gnunet>",
-                                        EXTRACTOR_METATYPE_UNKNOWN, 
-                                        EXTRACTOR_METAFORMAT_UTF8,
-                                        "text/plain",
-                                        tmp,
-                                        strlen(tmp) + 1);
+      GNUNET_CONTAINER_meta_data_insert (meta, "<gnunet>", type,
+                                         EXTRACTOR_METAFORMAT_UTF8,
+                                         "text/plain",
+                                         &tmp[strlen (typename_i18n) + 1],
+                                         strlen (&tmp
+                                                 [strlen (typename_i18n) + 1]) +
+                                         1);
       GNUNET_free (tmp);
-      printf (_
-              ("Unknown metadata type in metadata option `%s'.  Using metadata type `unknown' instead.\n"),
-              value);
+      tmp = NULL;
+      break;
     }
+  }
+#endif
+
+  if (NULL != tmp)
+  {
+    GNUNET_CONTAINER_meta_data_insert (meta, "<gnunet>",
+                                       EXTRACTOR_METATYPE_UNKNOWN,
+                                       EXTRACTOR_METAFORMAT_UTF8, "text/plain",
+                                       tmp, strlen (tmp) + 1);
+    GNUNET_free (tmp);
+    printf (_
+            ("Unknown metadata type in metadata option `%s'.  Using metadata type `unknown' instead.\n"),
+            value);
+  }
   return GNUNET_OK;
 }