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
arch
x86
boot
string.c
Go to the documentation of this file.
1
/* -*- linux-c -*- ------------------------------------------------------- *
2
*
3
* Copyright (C) 1991, 1992 Linus Torvalds
4
* Copyright 2007 rPath, Inc. - All Rights Reserved
5
*
6
* This file is part of the Linux kernel, and is made available under
7
* the terms of the GNU General Public License version 2.
8
*
9
* ----------------------------------------------------------------------- */
10
11
/*
12
* Very basic string functions
13
*/
14
15
#include "
boot.h
"
16
17
int
strcmp
(
const
char
*
str1
,
const
char
*str2)
18
{
19
const
unsigned
char
*
s1
= (
const
unsigned
char
*)str1;
20
const
unsigned
char
*
s2
= (
const
unsigned
char
*)str2;
21
int
delta
= 0;
22
23
while
(*s1 || *s2) {
24
delta = *s2 - *
s1
;
25
if
(delta)
26
return
delta
;
27
s1++;
28
s2++;
29
}
30
return
0;
31
}
32
33
int
strncmp
(
const
char
*
cs
,
const
char
*
ct
,
size_t
count
)
34
{
35
unsigned
char
c1, c2;
36
37
while
(count) {
38
c1 = *cs++;
39
c2 = *ct++;
40
if
(c1 != c2)
41
return
c1 < c2 ? -1 : 1;
42
if
(!c1)
43
break
;
44
count--;
45
}
46
return
0;
47
}
48
49
size_t
strnlen
(
const
char
*
s
,
size_t
maxlen)
50
{
51
const
char
*
es
=
s
;
52
while
(*es && maxlen) {
53
es++;
54
maxlen--;
55
}
56
57
return
(es - s);
58
}
59
60
unsigned
int
atou
(
const
char
*
s
)
61
{
62
unsigned
int
i
= 0;
63
while
(
isdigit
(*s))
64
i = i * 10 + (*s++ -
'0'
);
65
return
i
;
66
}
67
68
/* Works only for digits and letters, but small and fast */
69
#define TOLOWER(x) ((x) | 0x20)
70
71
static
unsigned
int
simple_guess_base(
const
char
*
cp
)
72
{
73
if
(cp[0] ==
'0'
) {
74
if
(
TOLOWER
(cp[1]) ==
'x'
&&
isxdigit
(cp[2]))
75
return
16;
76
else
77
return
8;
78
}
else
{
79
return
10;
80
}
81
}
82
90
unsigned
long
long
simple_strtoull
(
const
char
*
cp
,
char
**endp,
unsigned
int
base)
91
{
92
unsigned
long
long
result
= 0;
93
94
if
(!base)
95
base = simple_guess_base(cp);
96
97
if
(base == 16 && cp[0] ==
'0'
&&
TOLOWER
(cp[1]) ==
'x'
)
98
cp += 2;
99
100
while
(
isxdigit
(*cp)) {
101
unsigned
int
value
;
102
103
value =
isdigit
(*cp) ? *cp -
'0'
:
TOLOWER
(*cp) -
'a'
+ 10;
104
if
(value >= base)
105
break
;
106
result = result * base +
value
;
107
cp++;
108
}
109
if
(endp)
110
*endp = (
char
*)cp;
111
112
return
result
;
113
}
114
119
size_t
strlen
(
const
char
*
s
)
120
{
121
const
char
*
sc
;
122
123
for
(sc = s; *sc !=
'\0'
; ++
sc
)
124
/* nothing */
;
125
return
sc -
s
;
126
}
127
133
char
*
strstr
(
const
char
*
s1
,
const
char
*
s2
)
134
{
135
size_t
l1
,
l2
;
136
137
l2 =
strlen
(s2);
138
if
(!l2)
139
return
(
char
*)
s1
;
140
l1 =
strlen
(s1);
141
while
(l1 >= l2) {
142
l1--;
143
if
(!
memcmp
(s1, s2, l2))
144
return
(
char
*)
s1
;
145
s1++;
146
}
147
return
NULL
;
148
}
Generated on Thu Jan 10 2013 12:54:52 for Linux Kernel by
1.8.2