-options to play with
[oweals/gnunet.git] / src / fs / gnunet-auto-share.c
index ec90ae2d55979d261f4183b05837a35dd5b40066..86cab5593ed1c531e62e3b12ebc5d9aaa28253ae 100644 (file)
@@ -283,6 +283,14 @@ save_state ()
   n = GNUNET_CONTAINER_multihashmap_size (work_finished);
   fn = get_state_file ();
   wh = GNUNET_BIO_write_open (fn);
+  if (NULL == wh)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+               _("Failed to save state to file %s\n"),
+               fn);
+    GNUNET_free (fn);
+    return;
+  }
   if (GNUNET_OK !=
       GNUNET_BIO_write_int32 (wh, n))
   {
@@ -480,7 +488,7 @@ work (void *cls,
              _("Publishing `%s'\n"),
              wi->filename);
   publish_proc = GNUNET_OS_start_process_vap (GNUNET_YES,
-                                             NULL, NULL,
+                                              0, NULL, NULL,
                                              "gnunet-publish",
                                              argv);
   if (NULL == publish_proc)
@@ -571,8 +579,10 @@ add_file (void *cls,
 
   if (GNUNET_YES == do_shutdown)
     return GNUNET_SYSERR;
-  if (NULL != strstr (filename,
-                     DIR_SEPARATOR_STR ".auto-share"))
+  if ( (NULL != strstr (filename,
+                     "/.auto-share")) ||
+       (NULL != strstr (filename,
+                       "\\.auto-share")) )
     return GNUNET_OK; /* skip internal file */
   GNUNET_CRYPTO_hash (filename,
                      strlen (filename),
@@ -671,7 +681,7 @@ run (void *cls, char *const *args, const char *cfgfile,
 {
   /* check arguments */
   if ((args[0] == NULL) || (args[1] != NULL) ||
-      (GNUNET_YES != GNUNET_DISK_directory_test (args[0])))
+      (GNUNET_YES != GNUNET_DISK_directory_test (args[0], GNUNET_YES)))
   {
     printf (_("You must specify one and only one directory name for automatic publication.\n"));
     ret = -1;
@@ -680,7 +690,7 @@ run (void *cls, char *const *args, const char *cfgfile,
   cfg_filename = GNUNET_strdup (cfgfile);
   cfg = c;
   dir_name = args[0];
-  work_finished = GNUNET_CONTAINER_multihashmap_create (1024);
+  work_finished = GNUNET_CONTAINER_multihashmap_create (1024, GNUNET_NO);
   load_state ();
   run_task = GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE,
                                                 &scan, NULL);
@@ -711,6 +721,7 @@ free_item (void *cls,
   return GNUNET_OK;
 }
 
+
 /**
  * The main function to automatically publish content to GNUnet.
  *
@@ -758,10 +769,13 @@ main (int argc, char *const *argv)
                            gettext_noop
                            ("Automatically publish files from a directory on GNUnet"),
                            options, &run, NULL)) ? ret : 1;
-  (void) GNUNET_CONTAINER_multihashmap_iterate (work_finished,
-                                               &free_item,
-                                               NULL);
-  GNUNET_CONTAINER_multihashmap_destroy (work_finished);
+  if (NULL != work_finished)
+  {
+    (void) GNUNET_CONTAINER_multihashmap_iterate (work_finished,
+                                                 &free_item,
+                                                 NULL);
+    GNUNET_CONTAINER_multihashmap_destroy (work_finished);
+  }
   while (NULL != (wi = work_head))
   {
     GNUNET_CONTAINER_DLL_remove (work_head, work_tail, wi);
@@ -774,6 +788,7 @@ main (int argc, char *const *argv)
   sigpipe = NULL;
   GNUNET_free (cfg_filename);
   cfg_filename = NULL;
+  GNUNET_free ((void*) argv);
   return ok;
 }