gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r6341 - GNUnet/src/applications/fs/tools


From: gnunet
Subject: [GNUnet-SVN] r6341 - GNUnet/src/applications/fs/tools
Date: Sat, 16 Feb 2008 21:34:20 -0700 (MST)

Author: grothoff
Date: 2008-02-16 21:34:20 -0700 (Sat, 16 Feb 2008)
New Revision: 6341

Modified:
   GNUnet/src/applications/fs/tools/gnunet-auto-share.c
Log:
fixes

Modified: GNUnet/src/applications/fs/tools/gnunet-auto-share.c
===================================================================
--- GNUnet/src/applications/fs/tools/gnunet-auto-share.c        2008-02-17 
03:59:14 UTC (rev 6340)
+++ GNUnet/src/applications/fs/tools/gnunet-auto-share.c        2008-02-17 
04:34:20 UTC (rev 6341)
@@ -52,6 +52,12 @@
 
 static int do_no_direct_references;
 
+static time_t start;
+
+static unsigned int done_pos;
+
+static unsigned int current_pos;
+
 /**
  * Print progess message.
  */
@@ -135,9 +141,8 @@
     return GNUNET_OK;
   if (ul != NULL)
     return GNUNET_SYSERR;
-  fn = GNUNET_malloc (strlen (filename) + strlen (dirName) + 2);
+  fn = GNUNET_malloc (strlen (filename) + strlen (dirName) + 1);
   strcpy (fn, dirName);
-  strcat (fn, DIR_SEPARATOR_STR);
   strcat (fn, filename);
   if (0 != stat (fn, &buf))
     {
@@ -172,7 +177,7 @@
   char *value;
 
   if (0 != strcmp (amc->filename, section))
-    return GNUNET_OK;
+    return 0;
   max = EXTRACTOR_getHighestKeywordTypeNumber ();
   for (type = 0; type < max; type++)
     {
@@ -186,7 +191,7 @@
                      _
                      ("Unknown keyword type `%s' in metadata configuration\n"),
                      option);
-      return GNUNET_OK;
+      return 0;
     }
   value = NULL;
   GNUNET_GC_get_configuration_value_string (cfg,
@@ -196,7 +201,7 @@
       GNUNET_ECRS_meta_data_insert (amc->meta, type, value);
       GNUNET_free (value);
     }
-  return GNUNET_OK;
+  return 0;
 }
 
 
@@ -207,15 +212,16 @@
   time_t latest;
   struct stat buf;
   struct AddMetadataClosure amc;
+  struct GNUNET_ECRS_URI * kuri;
   char *fn;
+  char * keys;
 
   if (filename[0] == '.')
     return GNUNET_OK;
   if (ul != NULL)
     return GNUNET_SYSERR;
-  fn = GNUNET_malloc (strlen (filename) + strlen (dirName) + 2);
+  fn = GNUNET_malloc (strlen (filename) + strlen (dirName) + 1);
   strcpy (fn, dirName);
-  strcat (fn, DIR_SEPARATOR_STR);
   strcat (fn, filename);
   if (0 != stat (fn, &buf))
     {
@@ -236,12 +242,30 @@
       GNUNET_free (fn);
       return GNUNET_OK;
     }
+  if ( (start > latest) &&
+       (current_pos < done_pos) )
+    {
+      GNUNET_free (fn);
+      current_pos++;
+      return GNUNET_OK;
+    }
+  done_pos = ++current_pos;
   amc.meta = GNUNET_ECRS_meta_data_create ();
   amc.filename = filename;
   /* attaching a listener will prompt iteration
      over all config values! */
   GNUNET_GC_attach_change_listener (meta_cfg, &add_meta_data, &amc);
   GNUNET_GC_detach_change_listener (meta_cfg, &add_meta_data, &amc);
+  keys = GNUNET_ECRS_meta_data_get_by_type(amc.meta,
+                                          EXTRACTOR_KEYWORDS);
+  if (keys != NULL)
+    kuri = GNUNET_ECRS_keyword_string_to_uri(NULL, keys);
+  else
+    kuri = NULL;
+  GNUNET_ECRS_meta_data_delete(amc.meta,
+                              EXTRACTOR_KEYWORDS,
+                              keys);
+  GNUNET_free_non_null(keys);
   ul = GNUNET_FSUI_upload_start (ctx,
                                  fn,
                                  (GNUNET_FSUI_DirectoryScanCallback) &
@@ -249,7 +273,9 @@
                                  priority, GNUNET_YES, GNUNET_YES,
                                  !do_no_direct_references,
                                  GNUNET_get_time () + 2 * GNUNET_CRON_YEARS,
-                                 amc.meta, gloKeywords, NULL);
+                                 amc.meta, gloKeywords, kuri);
+  if (kuri != NULL)
+    GNUNET_ECRS_uri_destroy(kuri);
   GNUNET_ECRS_meta_data_destroy (amc.meta);
   GNUNET_free (fn);
   return GNUNET_SYSERR;
@@ -269,8 +295,8 @@
   int i;
   int errorCode;
   unsigned long long verbose;
+  unsigned long long cfg_start;
   time_t last;
-  time_t start;
   GNUNET_CronTime delay;
   char *metafn;
 
@@ -295,6 +321,14 @@
   GNUNET_GC_get_configuration_value_number (cfg,
                                             "GNUNET",
                                             "VERBOSE", 0, 9999, 0, &verbose);
+  if (0 == GNUNET_GC_get_configuration_value_number (cfg,
+                                                    "GNUNET-AUTO-SHARE",
+                                                    "TIMESTAMP-LAST-RUN", 0, 
-1, 0, &cfg_start))
+    {
+      last = (time_t) cfg_start;
+    }
+  else
+    last = 0;  
   metafn = NULL;
   GNUNET_GC_get_configuration_value_filename (cfg,
                                               "FS",
@@ -309,13 +343,25 @@
                            &printstatus, &verbose);
   /* first insert all of the top-level files or directories */
 
-  last = 0;
+  delay = 5 * GNUNET_CRON_SECONDS;
   while (GNUNET_NO == GNUNET_shutdown_test ())
     {
+      GNUNET_thread_sleep (250 * GNUNET_CRON_MILLISECONDS);
       start = time (NULL);
+      current_pos = 0;
       GNUNET_disk_directory_scan (ectx, dirname, &probe_directory, &last);
       if (ul == NULL)
-        last = start;
+       {
+         last = start;
+         done_pos = 0;
+         GNUNET_GC_set_configuration_value_number (cfg,
+                                                   ectx,
+                                                   "GNUNET-AUTO-SHARE",
+                                                   "TIMESTAMP-LAST-RUN", 
+                                                   last);        
+         GNUNET_GC_write_configuration(cfg,
+                                       cfgFilename);
+       }
       if (GNUNET_YES == upload_done)
         {
           GNUNET_FSUI_upload_abort (ctx, ul);
@@ -331,7 +377,9 @@
             delay = GNUNET_CRON_HOURS;
         }
       else
-        delay = 5 * GNUNET_CRON_SECONDS;
+       {         
+         delay = 5 * GNUNET_CRON_SECONDS;
+       }
     }
   GNUNET_FSUI_stop (ctx);
   if (gloKeywords != NULL)





reply via email to

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