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:
Aric Stewart 2005-12-03 18:02:15 +01:00 committed by Alexandre Julliard
parent d0713d28e2
commit 1d5adff0f1
1 changed files with 48 additions and 1 deletions

View File

@ -150,11 +150,58 @@ char string[8], outpath[MAX_PATH], inpath[MAX_PATH], *infile;
* WCMD_create_dir * WCMD_create_dir
* *
* Create a directory. * 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) { void WCMD_create_dir (void) {
if (!CreateDirectory (param1, NULL)) WCMD_print_error (); if (!create_full_path(param1)) WCMD_print_error ();
} }
/**************************************************************************** /****************************************************************************