Blame view
lib/cmdline.c
3.65 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* * 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 * */ #include <linux/module.h> #include <linux/kernel.h> #include <linux/string.h> |
22f2e2801 [PATCH] get_optio... |
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
/* * 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 |
35 36 37 38 39 40 41 42 43 44 |
/** * 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 ... |
45 46 47 48 |
* 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 |
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
*/ int get_option (char **str, int *pint) { char *cur = *str; if (!cur || !(*cur)) return 0; *pint = simple_strtol (cur, str, 0); if (cur == *str) return 0; if (**str == ',') { (*str)++; return 2; } |
22f2e2801 [PATCH] get_optio... |
64 65 |
if (**str == '-') return 3; |
1da177e4c Linux-2.6.12-rc2 |
66 67 68 69 70 71 72 73 74 75 76 |
return 1; } /** * 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... |
77 78 |
* 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 |
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
* 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). */ char *get_options(const char *str, int nints, int *ints) { int res, i = 1; while (i < nints) { res = get_option ((char **)&str, ints + i); if (res == 0) break; |
22f2e2801 [PATCH] get_optio... |
95 96 97 98 99 100 101 102 103 104 105 106 |
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 |
107 108 109 110 111 112 113 114 115 116 117 |
i++; if (res == 1) break; } ints[0] = i - 1; return (char *)str; } /** * 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 121 122 123 124 125 126 |
* * Parses a string into a number. The number stored at @ptr is * potentially suffixed with %K (for kilobytes, or 1024 bytes), * %M (for megabytes, or 1048576 bytes), or %G (for gigabytes, or * 1073741824). If the number is suffixed with K, M, or G, then * the return value is the number multiplied by one kilobyte, one * megabyte, or one gigabyte, respectively. */ |
d974ae379 generic, memparse... |
127 |
unsigned long long memparse(const char *ptr, char **retptr) |
1da177e4c Linux-2.6.12-rc2 |
128 |
{ |
fd1938297 lib: allow mempar... |
129 |
char *endptr; /* local pointer to end of parsed string */ |
1da177e4c Linux-2.6.12-rc2 |
130 |
|
fd1938297 lib: allow mempar... |
131 132 133 |
unsigned long long ret = simple_strtoull(ptr, &endptr, 0); switch (*endptr) { |
1da177e4c Linux-2.6.12-rc2 |
134 135 136 137 138 139 140 141 142 |
case 'G': case 'g': ret <<= 10; case 'M': case 'm': ret <<= 10; case 'K': case 'k': ret <<= 10; |
fd1938297 lib: allow mempar... |
143 |
endptr++; |
1da177e4c Linux-2.6.12-rc2 |
144 145 146 |
default: break; } |
fd1938297 lib: allow mempar... |
147 148 149 |
if (retptr) *retptr = endptr; |
1da177e4c Linux-2.6.12-rc2 |
150 151 152 153 154 155 156 |
return ret; } EXPORT_SYMBOL(memparse); EXPORT_SYMBOL(get_option); EXPORT_SYMBOL(get_options); |