Changed names of functions in utility.c and all affected files, to make
[oweals/busybox.git] / coreutils / mknod.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * Mini mknod implementation for busybox
4  *
5  * Copyright (C) 1995, 1996 by Bruce Perens <bruce@pixar.com>.
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  *
21  */
22
23 #include "busybox.h"
24 #include <stdio.h>
25 #include <errno.h>
26 #include <sys/types.h>
27 #include <fcntl.h>
28 #include <unistd.h>
29
30 int mknod_main(int argc, char **argv)
31 {
32         char *thisarg;
33         mode_t mode = 0;
34         mode_t perm = 0666;
35         dev_t dev = 0;
36
37         argc--;
38         argv++;
39
40         /* Parse any options */
41         while (argc > 1) {
42                 if (**argv != '-')
43                         break;
44                 thisarg = *argv;
45                 thisarg++;
46                 switch (*thisarg) {
47                 case 'm':
48                         argc--;
49                         argv++;
50                         parse_mode(*argv, &perm);
51                         umask(0);
52                         break;
53                 default:
54                         usage(mknod_usage);
55                 }
56                 argc--;
57                 argv++;
58         }
59         if (argc != 4 && argc != 2) {
60                 usage(mknod_usage);
61         }
62         switch (argv[1][0]) {
63         case 'c':
64         case 'u':
65                 mode = S_IFCHR;
66                 break;
67         case 'b':
68                 mode = S_IFBLK;
69                 break;
70         case 'p':
71                 mode = S_IFIFO;
72                 if (argc!=2) {
73                         usage(mknod_usage);
74                 }
75                 break;
76         default:
77                 usage(mknod_usage);
78         }
79
80         if (mode == S_IFCHR || mode == S_IFBLK) {
81                 dev = (atoi(argv[2]) << 8) | atoi(argv[3]);
82         }
83
84         mode |= perm;
85
86         if (mknod(argv[0], mode, dev) != 0)
87                 error_msg_and_die("%s: %s\n", argv[0], strerror(errno));
88         return EXIT_SUCCESS;
89 }
90