From: curt Date: Wed, 28 Oct 1998 19:39:33 +0000 (+0000) Subject: Changes contributed by Norman Vine X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=17040e4b4dbffb51ff63b57ff0394de1882a2538;p=flightgear.git Changes contributed by Norman Vine --- diff --git a/Makedir/makedir.cxx b/Makedir/makedir.cxx index 24cee5dc8..9ba9db610 100644 --- a/Makedir/makedir.cxx +++ b/Makedir/makedir.cxx @@ -1,8 +1,13 @@ -#include // isspace() -#include // atoi() -#include // rint() + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifdef HAVE_STDLIB_H +#include +#endif + #include -#include #include // stat() #include // stat() @@ -10,98 +15,82 @@ #include -#ifdef __CYGWIN32__ -# define MKDIR(a) mkdir(a,S_IRWXU) // I am just guessing at this flag (NHV) -#endif // __CYGWIN32__ - -#ifdef __CYGWIN32__ - -// return the file path name ( foo/bar/file.ext = foo/bar ) -static void extract_path (char *in, char *base) { - int len, i; - - len = strlen (in); - strcpy (base, in); - i = len - 1; - while ( (i >= 0) && (in[i] != '/') ) { - i--; - } - - base[i] = '\0'; -} - - -// Make a subdirectory -static int my_mkdir (char *dir) { - struct stat stat_buf; - int result; - - printf ("mk_dir() "); - - result = stat (dir, &stat_buf); - - if (result != 0) { - MKDIR (dir); - result = stat (dir, &stat_buf); - if (result != 0) { - printf ("problem creating %s\n", dir); - } else { - printf ("%s created\n", dir); - } - } else { - printf ("%s already exists\n", dir); - } - return (result); -} - -#endif // __CYGWIN32__ - - -void scenery_dir( const string& dir ) { - struct stat stat_buf; - char base_path[256], file[256], exfile[256]; -#ifdef __CYGWIN32__ - char tmp_path[256]; +#ifdef WIN32 +#ifndef TRUE + #define FALSE 0 + #define TRUE 1 #endif - string command; - FILE *fd; - fgBUCKET p; - int result; - cout << "Dir = " + dir + "\n"; +char* PathDivider() +{ + return "\\"; +} // PathDivider - // stat() directory and create if needed - result = stat(dir.c_str(), &stat_buf); - if ( result != 0 ) { - cout << "Stat error need to create directory\n"; +void ReplaceDivider( char* path ) +{ + char div = PathDivider()[0]; + int i; -#ifndef __CYGWIN32__ + if ( ! path ) + return; + if ( div == '/' ) + return; - command = "mkdir -p " + dir + "\n"; - system( command.c_str() ); + for ( i = 0; path[i]; i++ ) + if ( path[i] == '/' ) + path[i] = div; -#else // __CYGWIN32__ +} // ReplaceDivider - // Cygwin crashes when trying to output to node file - // explicitly making directory structure seems OK on Win95 +int Exists( char* path ) +{ + struct stat statbuff; - extract_path (base_path, tmp_path); + ReplaceDivider( path ); + if ( path[strlen( path ) - 1] == ':' ) + return TRUE; + if ( _stat( path, &statbuff ) != 0 ) + return FALSE; + return TRUE; +} // Exists - dir = tmp_path; - if (my_mkdir ( dir.c_str() )) { exit (-1); } - dir = base_path; - if (my_mkdir ( dir.c_str() )) { exit (-1); } +void CreateDir( char* path ) +{ + if ( ! path || ! strlen( path ) ) + return; + ReplaceDivider( path ); + // see if the parent exists yet + int i; // looping index + string parent; // path to parent + + parent = path; + for ( i = strlen( parent.c_str() )-1; i >= 0; i-- ) + if ( parent[i] == PathDivider()[0] ) + { + parent[i] = '\0'; + break; + } + + if ( ! Exists( parent.c_str() ) ) + { + CreateDir( parent.c_str() ); + } -#endif // __CYGWIN32__ + if ( ! Exists( path ) ) + { + if (mkdir(path, S_IRWXU) != 0 ) + { + cout << "Could not create directory " << path << endl; + }else{ + cout << "CreateDir: " << path << endl; + } + } + +} // CreateDir - } else { - // assume directory exists - cout << " Allready Exists !\n"; - } -} int main(int argc, char **argv) { @@ -109,11 +98,14 @@ int main(int argc, char **argv) if(argc != 2) { - cout << "Makedir failed\n"; + cout << "Makedir failed needs one argument\n"; return(10); } root = argv[1]; - scenery_dir(root); - + + CreateDir(root.c_str()); + return(0); } +#endif // WIN32 +