gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r24813 - gnunet/src/util
Date: Tue, 6 Nov 2012 23:32:42 +0100

Author: harsha
Date: 2012-11-06 23:32:42 +0100 (Tue, 06 Nov 2012)
New Revision: 24813

Modified:
   gnunet/src/util/disk.c
Log:
check for existing directories in reverse order

Modified: gnunet/src/util/disk.c
===================================================================
--- gnunet/src/util/disk.c      2012-11-06 22:20:57 UTC (rev 24812)
+++ gnunet/src/util/disk.c      2012-11-06 22:32:42 UTC (rev 24813)
@@ -676,8 +676,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);
@@ -707,6 +708,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);
+      if (GNUNET_SYSERR == 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;
+  /* Starting creating directories */
   while (pos <= len)
   {
     if ((rdir[pos] == DIR_SEPARATOR) || (pos == len))




reply via email to

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