/************************************************************************/ /* */ /* Create all subdirectories of a given pathname */ /* */ /* Bug reports should be sent to */ /* */ /* harald@os2point.ping.de */ /* harald@haport.sesam.com */ /* Fido: 2:2448/434 */ /* */ /************************************************************************/ #include #include #include #include #include #include #include #include /************************************************************************/ /* makepath */ /* */ /* Creates a subdirectory and all its intermediate directories too. */ /* The 'pathname' parameter must contain backslashes, not slashes, */ /* including a trailing backslash. */ /* */ /* An appended filename would do no harm. */ /* */ /************************************************************************/ int makepath(char *pathname) { int r; char *cp = strrchr(pathname, '\\'); /* * Optimize common case, in which parent directory exists */ if(cp) *cp = '\0'; r = mkdir(pathname); if(cp) *cp = '\\'; if(!r) return(0); /* * Set cp on first directory following a drive name */ cp = pathname; if(pathname[1] == ':' || (pathname[0] == '\\' && pathname[1] == '\\')) cp += 3; /* * Now loop to create all subdirs */ r = 0; while(!r && (cp = strchr(cp, '\\')) != NULL) { *cp = '\0'; if(mkdir(pathname) && errno != EACCES) { r = -1; lperror(pathname); } *cp++ = '\\'; } return(r); }