getfields.c
[akaros.git] / kern / src / ns / getfields.c
1 // INFERNO
2 #include <vfs.h>
3 #include <kfs.h>
4 #include <slab.h>
5 #include <kmalloc.h>
6 #include <kref.h>
7 #include <string.h>
8 #include <stdio.h>
9 #include <assert.h>
10 #include <error.h>
11 #include <cpio.h>
12 #include <pmap.h>
13 #include <smp.h>
14 #include <ip.h>
15
16 int
17 getfields(char *str, char **args, int max, int mflag, char *set)
18 {
19         //Rune r;
20         int next = 0;
21         int r;
22         int nr, intok, narg;
23
24         if(max <= 0)
25                 return 0;
26
27         narg = 0;
28         args[narg] = str;
29         if(!mflag)
30                 narg++;
31         intok = 0;
32         for(;; str += nr) {
33                 r = str[next++];
34                 //nr = chartorune(&r, str);
35                 nr = 1;
36                 
37                 if(r == 0)
38                         break;
39                 //if(utfrune(set, r)) {
40                 if(strchr(set, r)) {
41                         if(narg >= max)
42                                 break;
43                         *str = 0;
44                         intok = 0;
45                         args[narg] = str + nr;
46                         if(!mflag)
47                                 narg++;
48                 } else {
49                         if(!intok && mflag)
50                                 narg++;
51                         intok = 1;
52                 }
53         }
54         return narg;
55 }