nckernel
0.1
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
slibc
src
stdlib.c
Go to the documentation of this file.
1
#include <
sys/types.h
>
2
#include <
stdio.h
>
3
#include <
string.h
>
4
#include <
stdarg.h
>
5
#include <
stddef.h
>
6
#include <
stdint.h
>
7
#include <
unistd.h
>
8
#include <
ctype.h
>
/* isXXXX */
9
#include <
errno.h
>
10
11
char
**
environ
;
12
13
int
atoi
(
const
char
*nptr)
14
{
15
int
i;
16
17
for
(i = 0; *nptr; nptr++) {
18
i = (i * 10) + (*nptr -
'0'
);
19
}
20
21
return
i;
22
}
23
24
long
atol
(
const
char
*nptr)
25
{
26
long
i;
27
28
for
(i = 0; *nptr; nptr++) {
29
i = (i * 10) + (*nptr -
'0'
);
30
}
31
32
return
i;
33
}
34
35
long
long
atoll
(
const
char
*nptr)
36
{
37
return
0;
38
}
39
40
long
long
atoq
(
const
char
*nptr)
41
{
42
return
0;
43
}
44
45
int
setenv
(
const
char
*name,
const
char
*value,
int
overwrite)
46
{
47
return
0;
48
}
49
50
char
*
getenv
(
const
char
*name)
51
{
52
register
int
i;
53
int
namelen =
strlen
(name);
54
55
for
(i = 0;
environ
[i]; i++) {
56
if
(!
strncmp
(name,
environ
[i], namelen)) {
57
if
(
environ
[i][namelen] ==
'='
) {
58
return
environ
[i] + namelen + 1;
59
}
60
}
61
}
62
63
return
NULL
;
64
}
65
66
static
inline
int
todigit(
char
ch)
67
{
68
int
tmp;
69
70
if
(
isdigit
(ch)) {
71
tmp = ch -
'0'
;
72
}
else
if
(
isupper
(ch)) {
73
tmp = ch -
'A'
;
74
}
else
if
(
islower
(ch)) {
75
tmp = ch -
'a'
;
76
}
else
{
77
tmp = -
EINVAL
;
78
}
79
80
return
tmp;
81
}
82
83
long
int
strtol
(
const
char
*nptr,
char
**endptr,
int
base)
84
{
85
long
sign = 1;
86
long
ret;
87
int
tmp;
88
89
if
(
isspace
(*nptr)) {
90
nptr++;
91
}
92
93
if
(*nptr ==
'-'
) {
94
sign = -1;
95
nptr++;
96
}
else
if
(*nptr ==
'+'
) {
97
nptr++;
98
}
99
100
if
(nptr[0] ==
'0'
) {
101
if
(nptr[1] ==
'x'
) {
102
base = 16;
103
}
else
{
104
base = 8;
105
}
106
}
107
108
*endptr =
NULL
;
109
if
(!base) {
110
char
*ptr;
111
112
ptr = (
char
*)nptr;
113
while
(*ptr) {
114
tmp = todigit(*ptr);
115
if
(tmp < 0) {
116
break
;
117
}
118
119
base = (base > tmp) ? base : tmp;
120
ptr++;
121
}
122
*endptr = ptr;
123
}
124
125
ret = 0;
126
if
(*endptr) {
127
while
(nptr != *endptr) {
128
ret *= base;
129
130
tmp = todigit(*nptr);
131
if
(tmp < 0) {
132
break
;
133
}
134
ret += tmp;
135
nptr++;
136
}
137
139
}
else
{
140
while
(*nptr) {
141
ret *= base;
142
143
tmp = todigit(*nptr);
144
if
(tmp < 0) {
145
break
;
146
}
147
148
if
(tmp >= base) {
149
break
;
150
}
151
152
ret += tmp;
153
nptr++;
154
}
155
156
*endptr = (
char
*)nptr;
157
}
158
159
ret *= sign;
160
return
ret;
161
}
162
163
long
long
int
strtoll
(
const
char
*nptr,
char
**endptr,
int
base)
164
{
165
return
0ll;
166
}
167
168
unsigned
long
int
strtoul
(
const
char
*nptr,
char
**endptr,
int
base)
169
{
170
long
ret;
171
ret =
strtol
(nptr, endptr, base);
172
return
(
unsigned
long
)ret;
173
}
174
175
unsigned
long
long
int
strtoull
(
const
char
*nptr,
char
**endptr,
176
int
base)
177
{
178
long
long
ret;
179
ret =
strtoll
(nptr, endptr, base);
180
return
(
unsigned
long
long
)ret;
181
}
182
183
/* End of a file */
Generated on Thu Nov 7 2013 02:45:26 for nckernel by
1.8.4