gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r24828 - gnunet/src/util


From: gnunet
Subject: [GNUnet-SVN] r24828 - gnunet/src/util
Date: Wed, 7 Nov 2012 19:43:26 +0100

Author: harsha
Date: 2012-11-07 19:43:26 +0100 (Wed, 07 Nov 2012)
New Revision: 24828

Modified:
   gnunet/src/util/disk.c
Log:
-adding rever order checking of directories

Modified: gnunet/src/util/disk.c
===================================================================
--- gnunet/src/util/disk.c      2012-11-07 18:26:52 UTC (rev 24827)
+++ gnunet/src/util/disk.c      2012-11-07 18:43:26 UTC (rev 24828)
@@ -683,8 +683,9 @@
 GNUNET_DISK_directory_create (const char *dir)
 {
   char *rdir;
-  int len;
-  int pos;
+  unsigned int len;
+  unsigned int pos;
+  unsigned int pos2;
   int ret = GNUNET_OK;
 
   rdir = GNUNET_STRINGS_filename_expand (dir);
@@ -714,6 +715,33 @@
     pos = 3;                    /* strlen("C:\\") */
   }
 #endif
+  /* Check which low level directories already exist */
+  pos2 = len;
+  rdir[len] = DIR_SEPARATOR;
+  while (pos <= pos2)
+  {
+    if (DIR_SEPARATOR == rdir[pos2])
+    {
+      rdir[pos2] = '\0';
+      ret = GNUNET_DISK_directory_test (rdir, GNUNET_NO);
+      if (GNUNET_NO == ret)
+      {
+        GNUNET_free (rdir);
+        return GNUNET_SYSERR;
+      }
+      rdir[pos2] = DIR_SEPARATOR;
+      if (GNUNET_YES == ret)
+      {
+        pos2++;
+        break;
+      }
+    }
+    pos2--;
+  }
+  rdir[len] = '\0';
+  if (pos < pos2)
+    pos = pos2;
+  /* Start creating directories */
   while (pos <= len)
   {
     if ((rdir[pos] == DIR_SEPARATOR) || (pos == len))
@@ -748,7 +776,6 @@
     pos++;
   }
   GNUNET_free (rdir);
-  LOG (GNUNET_ERROR_TYPE_ERROR, "we are done here\n");
   return GNUNET_OK;
 }
 




reply via email to

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