Changeset 370 for trunk/src/gmake/kmkbuiltin/mkdir.c
- Timestamp:
- Dec 18, 2005, 4:48:02 AM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gmake/kmkbuiltin/mkdir.c
r363 r370 38 38 static char sccsid[] = "@(#)mkdir.c 8.2 (Berkeley) 1/25/94"; 39 39 #endif /* not lint */ 40 #include <sys/cdefs.h> 41 __FBSDID("$FreeBSD: src/bin/mkdir/mkdir.c,v 1.28 2004/04/06 20:06:48 markm Exp $"); 40 42 #endif 41 #ifndef _MSC_VER42 #include <sys/cdefs.h>43 #endif44 //__FBSDID("$FreeBSD: src/bin/mkdir/mkdir.c,v 1.28 2004/04/06 20:06:48 markm Exp $");45 43 46 44 #include <sys/types.h> 47 45 #include <sys/stat.h> 48 46 49 //#include <err.h> 47 #include "err.h" 50 48 #include <errno.h> 51 49 #ifndef _MSC_VER … … 58 56 #include <sysexits.h> 59 57 #include <unistd.h> 60 #endif 61 62 #ifdef _MSC_VER 63 #define setmode setmode_msc 64 #include <stdarg.h> 65 #include <io.h> 66 #include <direct.h> 67 #undef setmode 68 #include "getopt.h" 69 70 typedef int mode_t; 71 #define EX_USAGE 1 72 void warn(const char *fmt, ...) 73 { 74 int err = errno; 75 va_list args; 76 va_start(args, fmt); 77 fprintf(stderr, "mkdir: "); 78 vfprintf(stderr, fmt, args); 79 fprintf(stderr, ": %s\n", strerror(err)); 80 va_end(args); 81 } 82 83 int mkdir_msc(const char *path, mode_t mode) 84 { 85 int rc = mkdir(path); 86 if (rc) 87 { 88 int len = strlen(path); 89 if (len > 0 && (path[len - 1] == '/' || path[len - 1] == '\\')) 90 { 91 char *str = strdup(path); 92 while (len > 0 && (str[len - 1] == '/' || str[len - 1] == '\\')) 93 str[--len] = '\0'; 94 rc = mkdir(str); 95 free(str); 96 } 97 } 98 return rc; 99 } 100 #define mkdir(a,b) mkdir_msc(a,b) 101 102 char *dirname(char *path) 103 { 104 return path; 105 } 106 107 #define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR) 108 #define S_IRWXG 0000070 109 #define S_IRWXO 0000007 110 #define S_IRWXU (_S_IREAD | _S_IWRITE | _S_IEXEC) 111 #define S_IXUSR _S_IEXEC 112 #define S_IWUSR _S_IWRITE 113 #define S_IRUSR _S_IREAD 114 58 #else 59 #include "mscfakes.h" 115 60 #endif 116 61 … … 133 78 mode = NULL; 134 79 vflag = 0; 80 /* kmk: reset getopt and set progname */ 81 g_progname = argv[0]; 135 82 opterr = 1; 136 83 optarg = NULL; … … 166 113 omode = S_IRWXU | S_IRWXG | S_IRWXO; 167 114 } else { 168 if ((set = setmode(mode)) == NULL) { 169 fprintf(stderr, "%s: invalid file mode: %s\n", mode, argv[0]); 170 return 1; 171 } 115 if ((set = setmode(mode)) == NULL) 116 return errx(1, "invalid file mode: %s", mode); 172 117 omode = getmode(set, S_IRWXU | S_IRWXG | S_IRWXO); 173 118 free(set); … … 181 126 } else if (mkdir(*argv, omode) < 0) { 182 127 if (errno == ENOTDIR || errno == ENOENT) 183 fprintf(stderr, "%s: %s: %s\n", argv[0], dirname(*argv), strerror(errno));128 warn("%s", dirname(*argv)); 184 129 else 185 fprintf(stderr, "%s: %s: %s\n", argv[0], *argv, strerror(errno));130 warn("%s", *argv); 186 131 success = 0; 187 132 } else if (vflag) … … 198 143 */ 199 144 if (success && mode != NULL && chmod(*argv, omode) == -1) { 200 fprintf(stderr, "%s: %s: %s\n", argv[0], *argv, strerror(errno));145 warn("%s", *argv); 201 146 exitval = 1; 202 147 } … … 240 185 continue; 241 186 *p = '\0'; 242 if ( p[1] == '\0')187 if (!last && p[1] == '\0') 243 188 last = 1; 244 189 if (first) {
Note:
See TracChangeset
for help on using the changeset viewer.