diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2012-11-06 22:32:42 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2012-11-06 22:32:42 +0000 |
commit | 139972864bcf90de42b1c4daf2a6db2cb5424c96 (patch) | |
tree | 3c5521c2e8392c402f644df0d1d23ecef91a1365 /src/util/disk.c | |
parent | 443873668be6734af6924066511bfa710637da08 (diff) | |
download | gnunet-139972864bcf90de42b1c4daf2a6db2cb5424c96.tar.gz gnunet-139972864bcf90de42b1c4daf2a6db2cb5424c96.zip |
check for existing directories in reverse order
Diffstat (limited to 'src/util/disk.c')
-rw-r--r-- | src/util/disk.c | 32 |
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 | |||
676 | GNUNET_DISK_directory_create (const char *dir) | 676 | GNUNET_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)) |