Mercurial > hg > toybox
annotate toys/mkfifo.c @ 157:714f4c051594
Add initial mkfifo implementation
author | Charlie Shepherd <masterdriverz@gentoo.org> |
---|---|
date | Wed, 07 Nov 2007 00:11:20 +0000 |
parents | |
children | 14fa82969ea3 |
rev | line source |
---|---|
157
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
1 /* vi: set sw=4 ts=4: */ |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
2 /* |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
3 * mkfifo.c: Create a named pipe. |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
4 */ |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
5 |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
6 #include "toys.h" |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
7 |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
8 int mkfifo_main(void) |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
9 { |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
10 char *arg; |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
11 int i; |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
12 mode_t mode; |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
13 |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
14 if (toys.optflags) { |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
15 long temp; |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
16 char *end; |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
17 int len = strlen(toy.mkfifo.mode); |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
18 temp = strtol(toy.mkfifo.mode, &end, 8); |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
19 switch (temp) { |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
20 case LONG_MAX: |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
21 case LONG_MIN: |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
22 case 0: |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
23 if (!errno) |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
24 break; |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
25 error_exit("Invalid mode"); |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
26 } |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
27 if (temp > 0777 || *end || len < 3 || len > 4) |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
28 error_exit("Invalid mode"); |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
29 mode = (mode_t)temp; |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
30 } else { |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
31 mode = 0644; |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
32 } |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
33 |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
34 for (i = 0; (arg = toys.optargs[i]); i++) |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
35 if (mkfifo(arg, mode)) |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
36 perror_exit(arg); |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
37 |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
38 return 0; |
714f4c051594
Add initial mkfifo implementation
Charlie Shepherd <masterdriverz@gentoo.org>
parents:
diff
changeset
|
39 } |