(U+5709): Use `->subsumptive'.
[chise/xemacs-chise.git.1] / netinstall / mkdir.cc
1 /*
2  * Copyright (c) 2000, Red Hat, Inc.
3  *
4  *     This program is free software; you can redistribute it and/or modify
5  *     it under the terms of the GNU General Public License as published by
6  *     the Free Software Foundation; either version 2 of the License, or
7  *     (at your option) any later version.
8  *
9  *     A copy of the GNU General Public License can be found at
10  *     http://www.gnu.org/
11  *
12  * Written by DJ Delorie <dj@cygnus.com>
13  *
14  */
15
16 /* see mkdir.h */
17
18 #include "win32.h"
19 #include <stdio.h>
20 #include "mkdir.h"
21
22 int
23 mkdir_p (int isadir, char *path)
24 {
25   char saved_char, *slash = 0;
26   char *c;
27   DWORD d, gse;
28
29   d = GetFileAttributes (path);
30   if (d != 0xffffffff && d & FILE_ATTRIBUTE_DIRECTORY)
31     return 0;
32
33   if (isadir)
34     {
35       if (CreateDirectory (path, 0))
36         return 0;
37       gse = GetLastError ();
38       if (gse != ERROR_PATH_NOT_FOUND && gse != ERROR_FILE_NOT_FOUND)
39         {
40           if (gse == ERROR_ALREADY_EXISTS)
41             {
42               fprintf (stderr, "warning: deleting \"%s\" so I can make a directory there\n",
43                        path);
44               if (DeleteFileA (path))
45                 return mkdir_p (isadir, path);
46             }
47           return 1;
48         }
49     }
50
51   for (c=path; *c; c++)
52     {
53       if (*c == ':')
54         slash = 0;
55       if (*c == '/' || *c == '\\')
56         slash = c;
57     }
58
59   if (!slash)
60     return 0;
61
62   saved_char = *slash;
63   *slash = 0;
64   if (mkdir_p (1, path))
65     {
66       *slash = saved_char;
67       return 1;
68     }
69   *slash = saved_char;
70
71   if (!isadir)
72     return 0;
73
74   return mkdir_p (isadir, path);
75 }