Root/
1 | /* |
2 | * getopt.c |
3 | */ |
4 | |
5 | #include <linux/kernel.h> |
6 | #include <linux/string.h> |
7 | #include <linux/net.h> |
8 | |
9 | #include "getopt.h" |
10 | |
11 | /** |
12 | * smb_getopt - option parser |
13 | * @caller: name of the caller, for error messages |
14 | * @options: the options string |
15 | * @opts: an array of &struct option entries controlling parser operations |
16 | * @optopt: output; will contain the current option |
17 | * @optarg: output; will contain the value (if one exists) |
18 | * @flag: output; may be NULL; should point to a long for or'ing flags |
19 | * @value: output; may be NULL; will be overwritten with the integer value |
20 | * of the current argument. |
21 | * |
22 | * Helper to parse options on the format used by mount ("a=b,c=d,e,f"). |
23 | * Returns opts->val if a matching entry in the 'opts' array is found, |
24 | * 0 when no more tokens are found, -1 if an error is encountered. |
25 | */ |
26 | int smb_getopt(char *caller, char **options, struct option *opts, |
27 | char **optopt, char **optarg, unsigned long *flag, |
28 | unsigned long *value) |
29 | { |
30 | char *token; |
31 | char *val; |
32 | int i; |
33 | |
34 | do { |
35 | if ((token = strsep(options, ",")) == NULL) |
36 | return 0; |
37 | } while (*token == '\0'); |
38 | *optopt = token; |
39 | |
40 | *optarg = NULL; |
41 | if ((val = strchr (token, '=')) != NULL) { |
42 | *val++ = 0; |
43 | if (value) |
44 | *value = simple_strtoul(val, NULL, 0); |
45 | *optarg = val; |
46 | } |
47 | |
48 | for (i = 0; opts[i].name != NULL; i++) { |
49 | if (!strcmp(opts[i].name, token)) { |
50 | if (!opts[i].flag && (!val || !*val)) { |
51 | printk("%s: the %s option requires an argument\n", |
52 | caller, token); |
53 | return -1; |
54 | } |
55 | |
56 | if (flag && opts[i].flag) |
57 | *flag |= opts[i].flag; |
58 | |
59 | return opts[i].val; |
60 | } |
61 | } |
62 | printk("%s: Unrecognized mount option %s\n", caller, token); |
63 | return -1; |
64 | } |
65 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9