aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2012-11-06 22:32:42 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2012-11-06 22:32:42 +0000
commit139972864bcf90de42b1c4daf2a6db2cb5424c96 (patch)
tree3c5521c2e8392c402f644df0d1d23ecef91a1365 /src
parent443873668be6734af6924066511bfa710637da08 (diff)
downloadgnunet-139972864bcf90de42b1c4daf2a6db2cb5424c96.tar.gz
gnunet-139972864bcf90de42b1c4daf2a6db2cb5424c96.zip
check for existing directories in reverse order
Diffstat (limited to 'src')
-rw-r--r--src/util/disk.c32
1 files changed, 30 insertions, 2 deletions
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
676GNUNET_DISK_directory_create (const char *dir) 676GNUNET_DISK_directory_create (const char *dir)
677{ 677{
678 char *rdir; 678 char *rdir;
679 int len; 679 unsigned int len;
680 int pos; 680 unsigned int pos;
681 unsigned int pos2;
681 int ret = GNUNET_OK; 682 int ret = GNUNET_OK;
682 683
683 rdir = GNUNET_STRINGS_filename_expand (dir); 684 rdir = GNUNET_STRINGS_filename_expand (dir);
@@ -707,6 +708,33 @@ GNUNET_DISK_directory_create (const char *dir)
707 pos = 3; /* strlen("C:\\") */ 708 pos = 3; /* strlen("C:\\") */
708 } 709 }
709#endif 710#endif
711 /* Check which low level directories already exist */
712 pos2 = len;
713 rdir[len] = DIR_SEPARATOR;
714 while (pos <= pos2)
715 {
716 if (DIR_SEPARATOR == rdir[pos2])
717 {
718 rdir[pos2] = '\0';
719 ret = GNUNET_DISK_directory_test (rdir);
720 if (GNUNET_SYSERR == ret)
721 {
722 GNUNET_free (rdir);
723 return GNUNET_SYSERR;
724 }
725 rdir[pos2] = DIR_SEPARATOR;
726 if (GNUNET_YES == ret)
727 {
728 pos2++;
729 break;
730 }
731 }
732 pos2--;
733 }
734 rdir[len] = '\0';
735 if (pos < pos2)
736 pos = pos2;
737 /* Starting creating directories */
710 while (pos <= len) 738 while (pos <= len)
711 { 739 {
712 if ((rdir[pos] == DIR_SEPARATOR) || (pos == len)) 740 if ((rdir[pos] == DIR_SEPARATOR) || (pos == len))