Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
lib
cmdline.c
Go to the documentation of this file.
1
/*
2
* linux/lib/cmdline.c
3
* Helper functions generally used for parsing kernel command line
4
* and module options.
5
*
6
* Code and copyrights come from init/main.c and arch/i386/kernel/setup.c.
7
*
8
* This source code is licensed under the GNU General Public License,
9
* Version 2. See the file COPYING for more details.
10
*
11
* GNU Indent formatting options for this file: -kr -i8 -npsl -pcs
12
*
13
*/
14
15
#include <linux/export.h>
16
#include <linux/kernel.h>
17
#include <linux/string.h>
18
19
/*
20
* If a hyphen was found in get_option, this will handle the
21
* range of numbers, M-N. This will expand the range and insert
22
* the values[M, M+1, ..., N] into the ints array in get_options.
23
*/
24
25
static
int
get_range(
char
**
str
,
int
*pint)
26
{
27
int
x
, inc_counter, upper_range;
28
29
(*str)++;
30
upper_range =
simple_strtol
((*str),
NULL
, 0);
31
inc_counter = upper_range - *pint;
32
for
(x = *pint; x < upper_range; x++)
33
*pint++ = x;
34
return
inc_counter;
35
}
36
52
int
get_option
(
char
**str,
int
*pint)
53
{
54
char
*
cur
= *
str
;
55
56
if
(!cur || !(*cur))
57
return
0;
58
*pint =
simple_strtol
(cur, str, 0);
59
if
(cur == *str)
60
return
0;
61
if
(**str ==
','
) {
62
(*str)++;
63
return
2;
64
}
65
if
(**str ==
'-'
)
66
return
3;
67
68
return
1;
69
}
70
88
char
*
get_options
(
const
char
*str,
int
nints,
int
*ints)
89
{
90
int
res
,
i
= 1;
91
92
while
(i < nints) {
93
res =
get_option
((
char
**)&str, ints + i);
94
if
(res == 0)
95
break
;
96
if
(res == 3) {
97
int
range_nums;
98
range_nums = get_range((
char
**)&str, ints + i);
99
if
(range_nums < 0)
100
break
;
101
/*
102
* Decrement the result by one to leave out the
103
* last number in the range. The next iteration
104
* will handle the upper number in the range
105
*/
106
i += (range_nums - 1);
107
}
108
i++;
109
if
(res == 1)
110
break
;
111
}
112
ints[0] = i - 1;
113
return
(
char
*)
str
;
114
}
115
129
unsigned
long
long
memparse
(
const
char
*
ptr
,
char
**retptr)
130
{
131
char
*endptr;
/* local pointer to end of parsed string */
132
133
unsigned
long
long
ret
=
simple_strtoull
(ptr, &endptr, 0);
134
135
switch
(*endptr) {
136
case
'G'
:
137
case
'g'
:
138
ret <<= 10;
139
case
'M'
:
140
case
'm'
:
141
ret <<= 10;
142
case
'K'
:
143
case
'k'
:
144
ret <<= 10;
145
endptr++;
146
default
:
147
break
;
148
}
149
150
if
(retptr)
151
*retptr = endptr;
152
153
return
ret
;
154
}
155
156
157
EXPORT_SYMBOL
(
memparse
);
158
EXPORT_SYMBOL
(
get_option
);
159
EXPORT_SYMBOL
(
get_options
);
Generated on Thu Jan 10 2013 13:09:15 for Linux Kernel by
1.8.2