wcmd: mkdir recursive create
In at least both win2k and winxp mkdir from the command prompt can recursively create full directory paths. This implements that functionality.
This commit is contained in:
parent
d0713d28e2
commit
1d5adff0f1
|
@ -150,11 +150,58 @@ char string[8], outpath[MAX_PATH], inpath[MAX_PATH], *infile;
|
|||
* WCMD_create_dir
|
||||
*
|
||||
* Create a directory.
|
||||
*
|
||||
* this works recursivly. so mkdir dir1\dir2\dir3 will create dir1 and dir2 if
|
||||
* they do not already exist.
|
||||
*/
|
||||
|
||||
BOOL create_full_path(CHAR* path)
|
||||
{
|
||||
int len;
|
||||
CHAR *new_path;
|
||||
BOOL ret = TRUE;
|
||||
|
||||
new_path = HeapAlloc(GetProcessHeap(),0,strlen(path)+1);
|
||||
strcpy(new_path,path);
|
||||
|
||||
while ((len = strlen(new_path)) && new_path[len - 1] == '\\')
|
||||
new_path[len - 1] = 0;
|
||||
|
||||
while (!CreateDirectory(new_path,NULL))
|
||||
{
|
||||
CHAR *slash;
|
||||
DWORD last_error = GetLastError();
|
||||
if (last_error == ERROR_ALREADY_EXISTS)
|
||||
break;
|
||||
|
||||
if (last_error != ERROR_PATH_NOT_FOUND)
|
||||
{
|
||||
ret = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!(slash = strrchr(new_path,'\\')) && ! (slash = strrchr(new_path,'/')))
|
||||
{
|
||||
ret = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
len = slash - new_path;
|
||||
new_path[len] = 0;
|
||||
if (!create_full_path(new_path))
|
||||
{
|
||||
ret = FALSE;
|
||||
break;
|
||||
}
|
||||
new_path[len] = '\\';
|
||||
}
|
||||
HeapFree(GetProcessHeap(),0,new_path);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void WCMD_create_dir (void) {
|
||||
|
||||
if (!CreateDirectory (param1, NULL)) WCMD_print_error ();
|
||||
if (!create_full_path(param1)) WCMD_print_error ();
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
Loading…
Reference in New Issue