Mercurial > hg > xemacs-beta
diff netinstall/mkdir.cc @ 448:3078fd1074e8 r21-2-39
Import from CVS: tag r21-2-39
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:38:25 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/netinstall/mkdir.cc Mon Aug 13 11:38:25 2007 +0200 @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2000, Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * A copy of the GNU General Public License can be found at + * http://www.gnu.org/ + * + * Written by DJ Delorie <dj@cygnus.com> + * + */ + +/* see mkdir.h */ + +#include "win32.h" +#include <stdio.h> +#include "mkdir.h" + +int +mkdir_p (int isadir, char *path) +{ + char saved_char, *slash = 0; + char *c; + DWORD d, gse; + + d = GetFileAttributes (path); + if (d != 0xffffffff && d & FILE_ATTRIBUTE_DIRECTORY) + return 0; + + if (isadir) + { + if (CreateDirectory (path, 0)) + return 0; + gse = GetLastError (); + if (gse != ERROR_PATH_NOT_FOUND && gse != ERROR_FILE_NOT_FOUND) + { + if (gse == ERROR_ALREADY_EXISTS) + { + fprintf (stderr, "warning: deleting \"%s\" so I can make a directory there\n", + path); + if (DeleteFileA (path)) + return mkdir_p (isadir, path); + } + return 1; + } + } + + for (c=path; *c; c++) + { + if (*c == ':') + slash = 0; + if (*c == '/' || *c == '\\') + slash = c; + } + + if (!slash) + return 0; + + saved_char = *slash; + *slash = 0; + if (mkdir_p (1, path)) + { + *slash = saved_char; + return 1; + } + *slash = saved_char; + + if (!isadir) + return 0; + + return mkdir_p (isadir, path); +}