aboutsummaryrefslogtreecommitdiff
path: root/src/util/disk.c
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2012-11-07 18:43:26 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2012-11-07 18:43:26 +0000
commit7fb1443f7f37c4a2162881afa254c2a7832dc846 (patch)
tree01d8153b86af5af14e3e6ba592f880bedfac9636 /src/util/disk.c
parentfb8e0f9efd82542dfa04df21346095a7fe4a1f05 (diff)
downloadgnunet-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.c33
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
683GNUNET_DISK_directory_create (const char *dir) 683GNUNET_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