Formerly time/time.h.~12~
[kopensolaris-gnu/glibc.git] / time / emkdir.c
1 #ifdef LIBC
2 #include <ansidecl.h>
3 #endif
4
5 #ifndef lint
6 #ifndef NOID
7 static char     elsieid[] = "@(#)emkdir.c       8.20";
8 #endif /* !defined NOID */
9 #endif /* !defined lint */
10
11 #ifndef emkdir
12
13 /*LINTLIBRARY*/
14
15 #include "private.h"
16
17 extern char *   imalloc P((int n));
18 extern void     ifree P((char * p));
19
20 static char *
21 quoted(name)
22 register const char *   name;
23 {
24         register char * result;
25         register char * cp;
26         register int    c;
27
28         if (name == NULL)
29                 name = "";
30         result = imalloc(4 * strlen(name) + 3);
31         if (result == NULL)
32                 return NULL;
33         cp = result;
34 #ifdef unix
35         *cp++ = '\'';
36         while ((c = *name++) != '\0')
37                 if (c == '\'') {
38                         *cp++ = c;
39                         *cp++ = '\\';
40                         *cp++ = c;
41                         *cp++ = c;
42                 } else  *cp++ = c;
43         *cp++ = '\'';
44 #else /* !defined unix */
45         while ((c = *name++) != '\0')
46                 if (c == '/')
47                         *cp++ = '\\';
48                 else    *cp++ = c;
49 #endif /* !defined unix */
50         *cp = '\0';
51         return result;
52 }
53
54 int
55 emkdir(name, mode)
56 const char *    name;
57 const int       mode;
58 {
59         register int            result;
60         register const char *   format;
61         register char *         command;
62         register char *         qname;
63
64         if ((qname = quoted(name)) == NULL)
65                 return -1;
66 #ifdef unix
67         format = "mkdir 2>&- %s && chmod 2>&- %o %s";
68 #else /* !defined unix */
69         format = "mkdir %s";
70 #endif /* !defined unix */
71         command = imalloc(strlen(format) + 2 * strlen(qname) + 20 + 1);
72         if (command == NULL) {
73                 ifree(qname);
74                 return -1;
75         }
76         (void) sprintf(command, format, qname, mode, qname);
77         ifree(qname);
78         result = system(command);
79         ifree(command);
80         return (result == 0) ? 0 : -1;
81 }
82
83 /*
84 ** UNIX is a registered trademark of AT&T.
85 */
86
87 #endif /* !defined emkdir */