vsprintf.c (9f36e2c448007b54851e7e4fa48da97d1477a175) | vsprintf.c (33ee3b2e2eb9b4b6c64dcf9ed66e2ac3124e748c) |
---|---|
1/* 2 * linux/lib/vsprintf.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 */ 6 7/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ 8/* --- 106 unchanged lines hidden (view full) --- 115{ 116 if (*cp == '-') 117 return -simple_strtoull(cp + 1, endp, base); 118 119 return simple_strtoull(cp, endp, base); 120} 121EXPORT_SYMBOL(simple_strtoll); 122 | 1/* 2 * linux/lib/vsprintf.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 */ 6 7/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ 8/* --- 106 unchanged lines hidden (view full) --- 115{ 116 if (*cp == '-') 117 return -simple_strtoull(cp + 1, endp, base); 118 119 return simple_strtoull(cp, endp, base); 120} 121EXPORT_SYMBOL(simple_strtoll); 122 |
123/** 124 * strict_strtoul - convert a string to an unsigned long strictly 125 * @cp: The string to be converted 126 * @base: The number base to use 127 * @res: The converted result value 128 * 129 * strict_strtoul converts a string to an unsigned long only if the 130 * string is really an unsigned long string, any string containing 131 * any invalid char at the tail will be rejected and -EINVAL is returned, 132 * only a newline char at the tail is acceptible because people generally 133 * change a module parameter in the following way: 134 * 135 * echo 1024 > /sys/module/e1000/parameters/copybreak 136 * 137 * echo will append a newline to the tail. 138 * 139 * It returns 0 if conversion is successful and *res is set to the converted 140 * value, otherwise it returns -EINVAL and *res is set to 0. 141 * 142 * simple_strtoul just ignores the successive invalid characters and 143 * return the converted value of prefix part of the string. 144 */ 145int strict_strtoul(const char *cp, unsigned int base, unsigned long *res) 146{ 147 char *tail; 148 unsigned long val; 149 150 *res = 0; 151 if (!*cp) 152 return -EINVAL; 153 154 val = simple_strtoul(cp, &tail, base); 155 if (tail == cp) 156 return -EINVAL; 157 158 if ((tail[0] == '\0') || (tail[0] == '\n' && tail[1] == '\0')) { 159 *res = val; 160 return 0; 161 } 162 163 return -EINVAL; 164} 165EXPORT_SYMBOL(strict_strtoul); 166 167/** 168 * strict_strtol - convert a string to a long strictly 169 * @cp: The string to be converted 170 * @base: The number base to use 171 * @res: The converted result value 172 * 173 * strict_strtol is similiar to strict_strtoul, but it allows the first 174 * character of a string is '-'. 175 * 176 * It returns 0 if conversion is successful and *res is set to the converted 177 * value, otherwise it returns -EINVAL and *res is set to 0. 178 */ 179int strict_strtol(const char *cp, unsigned int base, long *res) 180{ 181 int ret; 182 if (*cp == '-') { 183 ret = strict_strtoul(cp + 1, base, (unsigned long *)res); 184 if (!ret) 185 *res = -(*res); 186 } else { 187 ret = strict_strtoul(cp, base, (unsigned long *)res); 188 } 189 190 return ret; 191} 192EXPORT_SYMBOL(strict_strtol); 193 194/** 195 * strict_strtoull - convert a string to an unsigned long long strictly 196 * @cp: The string to be converted 197 * @base: The number base to use 198 * @res: The converted result value 199 * 200 * strict_strtoull converts a string to an unsigned long long only if the 201 * string is really an unsigned long long string, any string containing 202 * any invalid char at the tail will be rejected and -EINVAL is returned, 203 * only a newline char at the tail is acceptible because people generally 204 * change a module parameter in the following way: 205 * 206 * echo 1024 > /sys/module/e1000/parameters/copybreak 207 * 208 * echo will append a newline to the tail of the string. 209 * 210 * It returns 0 if conversion is successful and *res is set to the converted 211 * value, otherwise it returns -EINVAL and *res is set to 0. 212 * 213 * simple_strtoull just ignores the successive invalid characters and 214 * return the converted value of prefix part of the string. 215 */ 216int strict_strtoull(const char *cp, unsigned int base, unsigned long long *res) 217{ 218 char *tail; 219 unsigned long long val; 220 221 *res = 0; 222 if (!*cp) 223 return -EINVAL; 224 225 val = simple_strtoull(cp, &tail, base); 226 if (tail == cp) 227 return -EINVAL; 228 if ((tail[0] == '\0') || (tail[0] == '\n' && tail[1] == '\0')) { 229 *res = val; 230 return 0; 231 } 232 233 return -EINVAL; 234} 235EXPORT_SYMBOL(strict_strtoull); 236 237/** 238 * strict_strtoll - convert a string to a long long strictly 239 * @cp: The string to be converted 240 * @base: The number base to use 241 * @res: The converted result value 242 * 243 * strict_strtoll is similiar to strict_strtoull, but it allows the first 244 * character of a string is '-'. 245 * 246 * It returns 0 if conversion is successful and *res is set to the converted 247 * value, otherwise it returns -EINVAL and *res is set to 0. 248 */ 249int strict_strtoll(const char *cp, unsigned int base, long long *res) 250{ 251 int ret; 252 if (*cp == '-') { 253 ret = strict_strtoull(cp + 1, base, (unsigned long long *)res); 254 if (!ret) 255 *res = -(*res); 256 } else { 257 ret = strict_strtoull(cp, base, (unsigned long long *)res); 258 } 259 260 return ret; 261} 262EXPORT_SYMBOL(strict_strtoll); 263 | |
264static noinline_for_stack 265int skip_atoi(const char **s) 266{ 267 int i = 0; 268 269 while (isdigit(**s)) 270 i = i*10 + *((*s)++) - '0'; 271 --- 1910 unchanged lines hidden --- | 123static noinline_for_stack 124int skip_atoi(const char **s) 125{ 126 int i = 0; 127 128 while (isdigit(**s)) 129 i = i*10 + *((*s)++) - '0'; 130 --- 1910 unchanged lines hidden --- |