From 139972864bcf90de42b1c4daf2a6db2cb5424c96 Mon Sep 17 00:00:00 2001 From: Sree Harsha Totakura Date: Tue, 6 Nov 2012 22:32:42 +0000 Subject: check for existing directories in reverse order --- src/util/disk.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/util/disk.c b/src/util/disk.c index 7c346dded..3b6c6361b 100644 --- a/src/util/disk.c +++ b/src/util/disk.c @@ -676,8 +676,9 @@ int 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 @@ GNUNET_DISK_directory_create (const char *dir) 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)) -- cgit v1.2.3