diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2012-11-07 18:43:26 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2012-11-07 18:43:26 +0000 |
commit | 7fb1443f7f37c4a2162881afa254c2a7832dc846 (patch) | |
tree | 01d8153b86af5af14e3e6ba592f880bedfac9636 /src/util/disk.c | |
parent | fb8e0f9efd82542dfa04df21346095a7fe4a1f05 (diff) | |
download | gnunet-7fb1443f7f37c4a2162881afa254c2a7832dc846.tar.gz gnunet-7fb1443f7f37c4a2162881afa254c2a7832dc846.zip |
-adding rever order checking of directories
Diffstat (limited to 'src/util/disk.c')
-rw-r--r-- | src/util/disk.c | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/src/util/disk.c b/src/util/disk.c index 044c377d7..8d1fed897 100644 --- a/src/util/disk.c +++ b/src/util/disk.c | |||
@@ -683,8 +683,9 @@ int | |||
683 | GNUNET_DISK_directory_create (const char *dir) | 683 | GNUNET_DISK_directory_create (const char *dir) |
684 | { | 684 | { |
685 | char *rdir; | 685 | char *rdir; |
686 | int len; | 686 | unsigned int len; |
687 | int pos; | 687 | unsigned int pos; |
688 | unsigned int pos2; | ||
688 | int ret = GNUNET_OK; | 689 | int ret = GNUNET_OK; |
689 | 690 | ||
690 | rdir = GNUNET_STRINGS_filename_expand (dir); | 691 | rdir = GNUNET_STRINGS_filename_expand (dir); |
@@ -714,6 +715,33 @@ GNUNET_DISK_directory_create (const char *dir) | |||
714 | pos = 3; /* strlen("C:\\") */ | 715 | pos = 3; /* strlen("C:\\") */ |
715 | } | 716 | } |
716 | #endif | 717 | #endif |
718 | /* Check which low level directories already exist */ | ||
719 | pos2 = len; | ||
720 | rdir[len] = DIR_SEPARATOR; | ||
721 | while (pos <= pos2) | ||
722 | { | ||
723 | if (DIR_SEPARATOR == rdir[pos2]) | ||
724 | { | ||
725 | rdir[pos2] = '\0'; | ||
726 | ret = GNUNET_DISK_directory_test (rdir, GNUNET_NO); | ||
727 | if (GNUNET_NO == ret) | ||
728 | { | ||
729 | GNUNET_free (rdir); | ||
730 | return GNUNET_SYSERR; | ||
731 | } | ||
732 | rdir[pos2] = DIR_SEPARATOR; | ||
733 | if (GNUNET_YES == ret) | ||
734 | { | ||
735 | pos2++; | ||
736 | break; | ||
737 | } | ||
738 | } | ||
739 | pos2--; | ||
740 | } | ||
741 | rdir[len] = '\0'; | ||
742 | if (pos < pos2) | ||
743 | pos = pos2; | ||
744 | /* Start creating directories */ | ||
717 | while (pos <= len) | 745 | while (pos <= len) |
718 | { | 746 | { |
719 | if ((rdir[pos] == DIR_SEPARATOR) || (pos == len)) | 747 | if ((rdir[pos] == DIR_SEPARATOR) || (pos == len)) |
@@ -748,7 +776,6 @@ GNUNET_DISK_directory_create (const char *dir) | |||
748 | pos++; | 776 | pos++; |
749 | } | 777 | } |
750 | GNUNET_free (rdir); | 778 | GNUNET_free (rdir); |
751 | LOG (GNUNET_ERROR_TYPE_ERROR, "we are done here\n"); | ||
752 | return GNUNET_OK; | 779 | return GNUNET_OK; |
753 | } | 780 | } |
754 | 781 | ||