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 } 66