函数源码 |
Source File:include\linux\kernel.h |
Create Date:2022-07-27 06:38:20 |
首页 | Copyright©Brick |
328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 | /** * kstrtoul - convert a string to an unsigned long * @s: The start of the string. The string must be null-terminated, and may also * include a single newline before its terminating null. The first character * may also be a plus sign, but not a minus sign. * @base: The number base to use. The maximum supported base is 16. If base is * given as 0, then the base of the string is automatically detected with the * conventional semantics - If it begins with 0x the number will be parsed as a * hexadecimal (case insensitive), if it otherwise begins with 0, it will be * parsed as an octal number. Otherwise it will be parsed as a decimal. * @res: Where to write the result of the conversion on success. * * Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. * Used as a replacement for the simple_strtoull. Return code must be checked. */ static inline int __must_check kstrtoul( const char *s, unsigned int base, unsigned long *res) { /* * We want to shortcut function call, but * __builtin_types_compatible_p(unsigned long, unsigned long long) = 0. */ if ( sizeof (unsigned long ) == sizeof (unsigned long long ) && __alignof__(unsigned long ) == __alignof__(unsigned long long )) return kstrtoull(s, base, (unsigned long long *)res); else return _kstrtoul(s, base, res); } |