1*80ee5cbfSDavid du Colombier #include <u.h>
2*80ee5cbfSDavid du Colombier #include <libc.h>
3*80ee5cbfSDavid du Colombier
4*80ee5cbfSDavid du Colombier int
getfields(char * str,char ** args,int max,int mflag,char * set)5*80ee5cbfSDavid du Colombier getfields(char *str, char **args, int max, int mflag, char *set)
6*80ee5cbfSDavid du Colombier {
7*80ee5cbfSDavid du Colombier Rune r;
8*80ee5cbfSDavid du Colombier int nr, intok, narg;
9*80ee5cbfSDavid du Colombier
10*80ee5cbfSDavid du Colombier if(max <= 0)
11*80ee5cbfSDavid du Colombier return 0;
12*80ee5cbfSDavid du Colombier
13*80ee5cbfSDavid du Colombier narg = 0;
14*80ee5cbfSDavid du Colombier args[narg] = str;
15*80ee5cbfSDavid du Colombier if(!mflag)
16*80ee5cbfSDavid du Colombier narg++;
17*80ee5cbfSDavid du Colombier intok = 0;
18*80ee5cbfSDavid du Colombier for(;; str += nr) {
19*80ee5cbfSDavid du Colombier nr = chartorune(&r, str);
20*80ee5cbfSDavid du Colombier if(r == 0)
21*80ee5cbfSDavid du Colombier break;
22*80ee5cbfSDavid du Colombier if(utfrune(set, r)) {
23*80ee5cbfSDavid du Colombier if(narg >= max)
24*80ee5cbfSDavid du Colombier break;
25*80ee5cbfSDavid du Colombier *str = 0;
26*80ee5cbfSDavid du Colombier intok = 0;
27*80ee5cbfSDavid du Colombier args[narg] = str + nr;
28*80ee5cbfSDavid du Colombier if(!mflag)
29*80ee5cbfSDavid du Colombier narg++;
30*80ee5cbfSDavid du Colombier } else {
31*80ee5cbfSDavid du Colombier if(!intok && mflag)
32*80ee5cbfSDavid du Colombier narg++;
33*80ee5cbfSDavid du Colombier intok = 1;
34*80ee5cbfSDavid du Colombier }
35*80ee5cbfSDavid du Colombier }
36*80ee5cbfSDavid du Colombier return narg;
37*80ee5cbfSDavid du Colombier }
38