Changeset 3192 for trunk/src/kmk/kmkbuiltin/mkdir.c
- Timestamp:
- Mar 26, 2018, 10:25:56 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/kmkbuiltin/mkdir.c
r2546 r3192 72 72 73 73 74 static int vflag;75 74 static struct option long_options[] = 76 75 { … … 84 83 extern mode_t bsd_getmode(const void *bbox, mode_t omode); 85 84 86 static int build( char *, mode_t);87 static int usage( FILE *);85 static int build(PKMKBUILTINCTX pCtx, char *, mode_t, int); 86 static int usage(PKMKBUILTINCTX pCtx, int fIsErr); 88 87 89 88 90 89 int 91 kmk_builtin_mkdir(int argc, char * argv[], char **envp)92 { 93 int ch, exitval, success, pflag ;90 kmk_builtin_mkdir(int argc, char **argv, char **envp, PKMKBUILTINCTX pCtx) 91 { 92 int ch, exitval, success, pflag, vflag; 94 93 mode_t omode, *set = (mode_t *)NULL; 95 94 char *mode; 96 95 97 omode = pflag = 0;96 omode = pflag = vflag = 0; 98 97 mode = NULL; 99 98 100 /* reinitialize globals */101 vflag = 0;102 103 99 /* kmk: reset getopt and set progname */ 104 g_progname = argv[0];105 100 opterr = 1; 106 101 optarg = NULL; … … 119 114 break; 120 115 case 261: 121 usage( stdout);116 usage(pCtx, 0); 122 117 return 0; 123 118 case 262: 124 119 return kbuild_version(argv[0]); 125 120 case '?': 126 127 return usage( stderr);121 default: 122 return usage(pCtx, 1); 128 123 } 129 124 … … 131 126 argv += optind; 132 127 if (argv[0] == NULL) 133 return usage( stderr);128 return usage(pCtx, 1); 134 129 135 130 if (mode == NULL) { … … 137 132 } else { 138 133 if ((set = bsd_setmode(mode)) == NULL) 139 return errx( 1, "invalid file mode: %s", mode);134 return errx(pCtx, 1, "invalid file mode: %s", mode); 140 135 omode = bsd_getmode(set, S_IRWXU | S_IRWXG | S_IRWXO); 141 136 free(set); … … 145 140 success = 1; 146 141 if (pflag) { 147 if (build( *argv, omode))142 if (build(pCtx, *argv, omode, vflag)) 148 143 success = 0; 149 144 } else if (mkdir(*argv, omode) < 0) { 150 145 if (errno == ENOTDIR || errno == ENOENT) 151 warn( "mkdir: %s", dirname(*argv));146 warn(pCtx, "mkdir: %s", dirname(*argv)); 152 147 else 153 warn( "mkdir: %s", *argv);148 warn(pCtx, "mkdir: %s", *argv); 154 149 success = 0; 155 150 } else if (vflag) 156 (void)printf("%s\n", *argv);151 kmk_builtin_ctx_printf(pCtx, 0, "%s\n", *argv); 157 152 158 153 if (!success) … … 166 161 */ 167 162 if (success && mode != NULL && chmod(*argv, omode) == -1) { 168 warn( "chmod: %s", *argv);163 warn(pCtx, "chmod: %s", *argv); 169 164 exitval = 1; 170 165 } … … 173 168 } 174 169 170 #ifdef KMK_BUILTIN_STANDALONE 171 int main(int argc, char **argv, char **envp) 172 { 173 KMKBUILTINCTX Ctx = { "kmk_mkdir", NULL }; 174 return kmk_builtin_mkdir(argc, argv, envp, &Ctx); 175 } 176 #endif 177 175 178 static int 176 build( char *path, mode_t omode)179 build(PKMKBUILTINCTX pCtx, char *path, mode_t omode, int vflag) 177 180 { 178 181 struct stat sb; … … 251 254 || errno == EACCES /* (ditto) */) { 252 255 if (stat(path, &sb) < 0) { 253 warn( "stat: %s", path);256 warn(pCtx, "stat: %s", path); 254 257 retval = 1; 255 258 break; … … 259 262 else 260 263 errno = ENOTDIR; 261 warn( "st_mode: %s", path);264 warn(pCtx, "st_mode: %s", path); 262 265 retval = 1; 263 266 break; 264 267 } 265 268 } else { 266 warn( "mkdir: %s", path);269 warn(pCtx, "mkdir: %s", path); 267 270 retval = 1; 268 271 break; 269 272 } 270 273 } else if (vflag) 271 printf("%s\n", path);274 kmk_builtin_ctx_printf(pCtx, 0, "%s\n", path); 272 275 if (!last) 273 276 *p = '/'; … … 279 282 280 283 static int 281 usage(FILE *pf) 282 { 283 fprintf(pf, "usage: %s [-pv] [-m mode] directory ...\n" 284 " or: %s --help\n" 285 " or: %s --version\n", 286 g_progname, g_progname, g_progname); 284 usage(PKMKBUILTINCTX pCtx, int fIsErr) 285 { 286 kmk_builtin_ctx_printf(pCtx, fIsErr, 287 "usage: %s [-pv] [-m mode] directory ...\n" 288 " or: %s --help\n" 289 " or: %s --version\n", 290 pCtx->pszProgName, pCtx->pszProgName, pCtx->pszProgName); 287 291 return EX_USAGE; 288 292 } 293
Note:
See TracChangeset
for help on using the changeset viewer.