Fossil SCM

Change the file_mkfolder() implementation to assume that the folder already exists and only go about creating it and its path if it does not previously exit.

drh 2017-08-23 17:53 trunk
Commit 92ea61837e987614f65a5b0da27c54c83534361e6c7806a6447db51e77ff76ca
1 file changed +7 -16
+7 -16
--- src/file.c
+++ src/file.c
@@ -632,32 +632,23 @@
632632
char *zName;
633633
634634
nName = strlen(zFilename);
635635
zName = mprintf("%s", zFilename);
636636
nName = file_simplify_name(zName, nName, 0);
637
- for(i=1; i<nName; i++){
638
- if( zName[i]=='/' ){
639
- zName[i] = 0;
640
-#if defined(_WIN32) || defined(__CYGWIN__)
641
- /*
642
- ** On Windows, local path looks like: C:/develop/project/file.txt
643
- ** The if stops us from trying to create a directory of a drive letter
644
- ** C: in this example.
645
- */
646
- if( !(i==2 && zName[1]==':') ){
647
-#endif
637
+ while( nName>0 && zName[nName-1]!='/' ){ nName--; }
638
+ if( nName ){
639
+ zName[nName-1] = 0;
640
+ if( file_wd_isdir(zName)!=1 ){
641
+ rc = file_mkfolder(zName, forceFlag, errorReturn);
642
+ if( rc==0 ){
648643
if( file_mkdir(zName, forceFlag) && file_wd_isdir(zName)!=1 ){
649
- if (errorReturn <= 0) {
644
+ if( errorReturn <= 0 ){
650645
fossil_fatal_recursive("unable to create directory %s", zName);
651646
}
652647
rc = errorReturn;
653
- break;
654648
}
655
-#if defined(_WIN32) || defined(__CYGWIN__)
656649
}
657
-#endif
658
- zName[i] = '/';
659650
}
660651
}
661652
free(zName);
662653
return rc;
663654
}
664655
--- src/file.c
+++ src/file.c
@@ -632,32 +632,23 @@
632 char *zName;
633
634 nName = strlen(zFilename);
635 zName = mprintf("%s", zFilename);
636 nName = file_simplify_name(zName, nName, 0);
637 for(i=1; i<nName; i++){
638 if( zName[i]=='/' ){
639 zName[i] = 0;
640 #if defined(_WIN32) || defined(__CYGWIN__)
641 /*
642 ** On Windows, local path looks like: C:/develop/project/file.txt
643 ** The if stops us from trying to create a directory of a drive letter
644 ** C: in this example.
645 */
646 if( !(i==2 && zName[1]==':') ){
647 #endif
648 if( file_mkdir(zName, forceFlag) && file_wd_isdir(zName)!=1 ){
649 if (errorReturn <= 0) {
650 fossil_fatal_recursive("unable to create directory %s", zName);
651 }
652 rc = errorReturn;
653 break;
654 }
655 #if defined(_WIN32) || defined(__CYGWIN__)
656 }
657 #endif
658 zName[i] = '/';
659 }
660 }
661 free(zName);
662 return rc;
663 }
664
--- src/file.c
+++ src/file.c
@@ -632,32 +632,23 @@
632 char *zName;
633
634 nName = strlen(zFilename);
635 zName = mprintf("%s", zFilename);
636 nName = file_simplify_name(zName, nName, 0);
637 while( nName>0 && zName[nName-1]!='/' ){ nName--; }
638 if( nName ){
639 zName[nName-1] = 0;
640 if( file_wd_isdir(zName)!=1 ){
641 rc = file_mkfolder(zName, forceFlag, errorReturn);
642 if( rc==0 ){
 
 
 
 
 
643 if( file_mkdir(zName, forceFlag) && file_wd_isdir(zName)!=1 ){
644 if( errorReturn <= 0 ){
645 fossil_fatal_recursive("unable to create directory %s", zName);
646 }
647 rc = errorReturn;
 
648 }
 
649 }
 
 
650 }
651 }
652 free(zName);
653 return rc;
654 }
655

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button