]> git.lizzy.rs Git - plan9front.git/blob - sys/src/ape/lib/ap/plan9/9iounit.c
merge
[plan9front.git] / sys / src / ape / lib / ap / plan9 / 9iounit.c
1 #include "lib.h"
2 #include <string.h>
3 #include <stdlib.h>
4 #include <fmt.h>
5 #include "sys9.h"
6 #include "dir.h"
7
8 /*
9  * Format:
10   3 r  M    4 (0000000000457def 11 00)   8192      512 /rc/lib/rcmain
11  */
12
13 static int
14 getfields(char *str, char **args, int max, int mflag)
15 {
16         char r;
17         int nr, intok, narg;
18
19         if(max <= 0)
20                 return 0;
21
22         narg = 0;
23         args[narg] = str;
24         if(!mflag)
25                 narg++;
26         intok = 0;
27         for(;;) {
28                 r = *str++;
29                 if(r == 0)
30                         break;
31                 if(r == ' ' || r == '\t'){
32                         if(narg >= max)
33                                 break;
34                         *str = 0;
35                         intok = 0;
36                         args[narg] = str + nr;
37                         if(!mflag)
38                                 narg++;
39                 } else {
40                         if(!intok && mflag)
41                                 narg++;
42                         intok = 1;
43                 }
44         }
45         return narg;
46 }
47 int
48 _IOUNIT(int fd)
49 {
50         int i, cfd;
51         char buf[128], *args[10];
52
53         snprint(buf, sizeof buf, "#d/%dctl", fd);
54         cfd = _OPEN(buf, OREAD);
55         if(cfd < 0)
56                 return 0;
57         i = _READ(cfd, buf, sizeof buf-1);
58         _CLOSE(cfd);
59         if(i <= 0)
60                 return 0;
61         buf[i] = '\0';
62         if(getfields(buf, args, 10, 1) != 10)
63                 return 0;
64         return atoi(args[7]);
65 }