|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1983 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that: (1) source distributions retain this entire copyright ! 7: * notice and comment, and (2) distributions including binaries display ! 8: * the following acknowledgement: ``This product includes software ! 9: * developed by the University of California, Berkeley and its contributors'' ! 10: * in the documentation or other materials provided with the distribution ! 11: * and in all advertising materials mentioning features or use of this ! 12: * software. Neither the name of the University nor the names of its ! 13: * contributors may be used to endorse or promote products derived ! 14: * from this software without specific prior written permission. ! 15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 18: */ ! 19: ! 20: #ifndef lint ! 21: char copyright[] = ! 22: "@(#) Copyright (c) 1983 Regents of the University of California.\n\ ! 23: All rights reserved.\n"; ! 24: #endif /* not lint */ ! 25: ! 26: #ifndef lint ! 27: static char sccsid[] = "@(#)mkdir.c 5.7 (Berkeley) 5/31/90"; ! 28: #endif /* not lint */ ! 29: ! 30: #include <sys/types.h> ! 31: #include <sys/stat.h> ! 32: #include <errno.h> ! 33: #include <stdio.h> ! 34: #include <string.h> ! 35: ! 36: extern int errno; ! 37: ! 38: main(argc, argv) ! 39: int argc; ! 40: char **argv; ! 41: { ! 42: extern int optind; ! 43: int ch, exitval, pflag; ! 44: ! 45: pflag = 0; ! 46: while ((ch = getopt(argc, argv, "p")) != EOF) ! 47: switch(ch) { ! 48: case 'p': ! 49: pflag = 1; ! 50: break; ! 51: case '?': ! 52: default: ! 53: usage(); ! 54: } ! 55: ! 56: if (!*(argv += optind)) ! 57: usage(); ! 58: ! 59: for (exitval = 0; *argv; ++argv) ! 60: if (pflag) ! 61: exitval |= build(*argv); ! 62: else if (mkdir(*argv, 0777) < 0) { ! 63: (void)fprintf(stderr, "mkdir: %s: %s\n", ! 64: *argv, strerror(errno)); ! 65: exitval = 1; ! 66: } ! 67: exit(exitval); ! 68: } ! 69: ! 70: build(path) ! 71: char *path; ! 72: { ! 73: register char *p; ! 74: struct stat sb; ! 75: int create, ch; ! 76: ! 77: for (create = 0, p = path;; ++p) ! 78: if (!*p || *p == '/') { ! 79: ch = *p; ! 80: *p = '\0'; ! 81: if (stat(path, &sb)) { ! 82: if (errno != ENOENT || mkdir(path, 0777) < 0) { ! 83: (void)fprintf(stderr, "mkdir: %s: %s\n", ! 84: path, strerror(errno)); ! 85: return(1); ! 86: } ! 87: create = 1; ! 88: } ! 89: if (!(*p = ch)) ! 90: break; ! 91: } ! 92: if (!create) { ! 93: (void)fprintf(stderr, "mkdir: %s: %s\n", path, ! 94: strerror(EEXIST)); ! 95: return(1); ! 96: } ! 97: return(0); ! 98: } ! 99: ! 100: usage() ! 101: { ! 102: (void)fprintf(stderr, "usage: mkdir [-p] dirname ...\n"); ! 103: exit(1); ! 104: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.