Blame view
lib/cmdline.c
4.08 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* * linux/lib/cmdline.c * Helper functions generally used for parsing kernel command line * and module options. * * Code and copyrights come from init/main.c and arch/i386/kernel/setup.c. * * This source code is licensed under the GNU General Public License, * Version 2. See the file COPYING for more details. * * GNU Indent formatting options for this file: -kr -i8 -npsl -pcs * */ |
8bc3bcc93 lib: reduce the u... |
14 |
#include <linux/export.h> |
1da177e4c Linux-2.6.12-rc2 |
15 16 |
#include <linux/kernel.h> #include <linux/string.h> |
22f2e2801 [PATCH] get_optio... |
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
/* * If a hyphen was found in get_option, this will handle the * range of numbers, M-N. This will expand the range and insert * the values[M, M+1, ..., N] into the ints array in get_options. */ static int get_range(char **str, int *pint) { int x, inc_counter, upper_range; (*str)++; upper_range = simple_strtol((*str), NULL, 0); inc_counter = upper_range - *pint; for (x = *pint; x < upper_range; x++) *pint++ = x; return inc_counter; } |
1da177e4c Linux-2.6.12-rc2 |
34 35 36 37 38 39 40 41 42 43 |
/** * get_option - Parse integer from an option string * @str: option string * @pint: (output) integer value parsed from @str * * Read an int from an option string; if available accept a subsequent * comma as well. * * Return values: |
72fd4a35a [PATCH] Numerous ... |
44 45 46 47 |
* 0 - no int in string * 1 - int found, no subsequent comma * 2 - int found including a subsequent comma * 3 - hyphen found to denote a range |
1da177e4c Linux-2.6.12-rc2 |
48 |
*/ |
9fd430544 lib/cmdline.c: fi... |
49 |
int get_option(char **str, int *pint) |
1da177e4c Linux-2.6.12-rc2 |
50 51 52 53 54 |
{ char *cur = *str; if (!cur || !(*cur)) return 0; |
9fd430544 lib/cmdline.c: fi... |
55 |
*pint = simple_strtol(cur, str, 0); |
1da177e4c Linux-2.6.12-rc2 |
56 57 58 59 60 61 |
if (cur == *str) return 0; if (**str == ',') { (*str)++; return 2; } |
22f2e2801 [PATCH] get_optio... |
62 63 |
if (**str == '-') return 3; |
1da177e4c Linux-2.6.12-rc2 |
64 65 66 |
return 1; } |
ff6f9bbb5 lib/cmdline.c: de... |
67 |
EXPORT_SYMBOL(get_option); |
1da177e4c Linux-2.6.12-rc2 |
68 69 70 71 72 73 74 75 |
/** * get_options - Parse a string into a list of integers * @str: String to be parsed * @nints: size of integer array * @ints: integer array * * This function parses a string containing a comma-separated |
22f2e2801 [PATCH] get_optio... |
76 77 |
* list of integers, a hyphen-separated range of _positive_ integers, * or a combination of both. The parse halts when the array is |
1da177e4c Linux-2.6.12-rc2 |
78 79 80 81 82 83 84 |
* full, or when no more numbers can be retrieved from the * string. * * Return value is the character in the string which caused * the parse to end (typically a null terminator, if @str is * completely parseable). */ |
9fd430544 lib/cmdline.c: fi... |
85 |
|
1da177e4c Linux-2.6.12-rc2 |
86 87 88 89 90 |
char *get_options(const char *str, int nints, int *ints) { int res, i = 1; while (i < nints) { |
9fd430544 lib/cmdline.c: fi... |
91 |
res = get_option((char **)&str, ints + i); |
1da177e4c Linux-2.6.12-rc2 |
92 93 |
if (res == 0) break; |
22f2e2801 [PATCH] get_optio... |
94 95 96 97 98 99 100 101 102 103 104 105 |
if (res == 3) { int range_nums; range_nums = get_range((char **)&str, ints + i); if (range_nums < 0) break; /* * Decrement the result by one to leave out the * last number in the range. The next iteration * will handle the upper number in the range */ i += (range_nums - 1); } |
1da177e4c Linux-2.6.12-rc2 |
106 107 108 109 110 111 112 |
i++; if (res == 1) break; } ints[0] = i - 1; return (char *)str; } |
ff6f9bbb5 lib/cmdline.c: de... |
113 |
EXPORT_SYMBOL(get_options); |
1da177e4c Linux-2.6.12-rc2 |
114 115 116 117 |
/** * memparse - parse a string with mem suffixes into a number * @ptr: Where parse begins |
fd1938297 lib: allow mempar... |
118 |
* @retptr: (output) Optional pointer to next char after parse completes |
1da177e4c Linux-2.6.12-rc2 |
119 120 |
* * Parses a string into a number. The number stored at @ptr is |
e004f3c77 lib/cmdline.c: ad... |
121 |
* potentially suffixed with K, M, G, T, P, E. |
1da177e4c Linux-2.6.12-rc2 |
122 |
*/ |
d974ae379 generic, memparse... |
123 |
unsigned long long memparse(const char *ptr, char **retptr) |
1da177e4c Linux-2.6.12-rc2 |
124 |
{ |
fd1938297 lib: allow mempar... |
125 |
char *endptr; /* local pointer to end of parsed string */ |
1da177e4c Linux-2.6.12-rc2 |
126 |
|
fd1938297 lib: allow mempar... |
127 128 129 |
unsigned long long ret = simple_strtoull(ptr, &endptr, 0); switch (*endptr) { |
e004f3c77 lib/cmdline.c: ad... |
130 131 132 133 134 135 136 137 138 |
case 'E': case 'e': ret <<= 10; case 'P': case 'p': ret <<= 10; case 'T': case 't': ret <<= 10; |
1da177e4c Linux-2.6.12-rc2 |
139 140 141 142 143 144 145 146 147 |
case 'G': case 'g': ret <<= 10; case 'M': case 'm': ret <<= 10; case 'K': case 'k': ret <<= 10; |
fd1938297 lib: allow mempar... |
148 |
endptr++; |
1da177e4c Linux-2.6.12-rc2 |
149 150 151 |
default: break; } |
fd1938297 lib: allow mempar... |
152 153 154 |
if (retptr) *retptr = endptr; |
1da177e4c Linux-2.6.12-rc2 |
155 156 |
return ret; } |
1da177e4c Linux-2.6.12-rc2 |
157 |
EXPORT_SYMBOL(memparse); |
6ccc72b87 lib: Add a generi... |
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
/** * parse_option_str - Parse a string and check an option is set or not * @str: String to be parsed * @option: option name * * This function parses a string containing a comma-separated list of * strings like a=b,c. * * Return true if there's such option in the string, or return false. */ bool parse_option_str(const char *str, const char *option) { while (*str) { if (!strncmp(str, option, strlen(option))) { str += strlen(option); if (!*str || *str == ',') return true; } while (*str && *str != ',') str++; if (*str == ',') str++; } return false; } |