|
|
1.1 root 1: /*
2: * Copyright (c) 1990 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) 1990 Regents of the University of California.\n\
23: All rights reserved.\n";
24: #endif /* not lint */
25:
26: #ifndef lint
27: static char sccsid[] = "@(#)mkfifo.c 5.3 (Berkeley) 6/1/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: main(argc, argv)
37: int argc;
38: char **argv;
39: {
40: extern int errno, optind;
41: int ch, exitval, pflag;
42:
43: pflag = 0;
44: while ((ch = getopt(argc, argv, "p")) != EOF)
45: switch(ch) {
46: case 'p':
47: pflag = 1;
48: break;
49: case '?':
50: default:
51: usage();
52: }
53:
54: if (!*(argv += optind))
55: usage();
56:
57: for (exitval = 0; *argv; ++argv) {
58: if (pflag && build(*argv)) {
59: exitval |= 1;
60: continue;
61: }
62: if (mkfifo(*argv, 0777) < 0) {
63: (void)fprintf(stderr, "mkfifo: %s: %s\n",
64: *argv, strerror(errno));
65: exitval |= 1;
66: }
67: }
68: exit(exitval);
69: }
70:
71: build(path)
72: char *path;
73: {
74: register char *p;
75: struct stat sb;
76:
77: for (p = path; *p; p++) {
78: if (*p != '/')
79: continue;
80: if (stat(path, &sb)) {
81: if (errno != ENOENT || mkdir(path, 0777) < 0) {
82: (void)fprintf(stderr, "mkdir: %s: %s\n",
83: path, strerror(errno));
84: return(1);
85: }
86: }
87: *p = '/';
88: }
89: return(0);
90: }
91:
92: usage()
93: {
94: (void)fprintf(stderr, "usage: mkfifo [-p] fifoname ...\n");
95: exit(1);
96: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.