wcmd: mkdir recursive create
Aric Stewart
aric at codeweavers.com
Fri Dec 2 11:51:39 CST 2005
in at least both win2k and winxp mkdir from the command prompt can
recursively create full directory paths. This implements that
functionality. Code basically the same as in setupapi which if i recall
correctly is Alexandre Julliards work.
-------------- next part --------------
Index: programs/wcmd/builtins.c
===================================================================
RCS file: /home/wine/wine/programs/wcmd/builtins.c,v
retrieving revision 1.32
diff -u -r1.32 builtins.c
--- programs/wcmd/builtins.c 2 Dec 2005 10:30:04 -0000 1.32
+++ programs/wcmd/builtins.c 2 Dec 2005 17:45:42 -0000
@@ -150,11 +150,58 @@
* 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 ();
}
/****************************************************************************
More information about the wine-patches
mailing list