By Jonathan Corbet
March 23, 2011
Kernel developers might rightly complain about being confused over which
functions should be used to convert strings to integer types. Old
functions like
simple_strtoul() will silently ignore junk at the
end of an integer value, so "
100xx" successfully converts to an
unsigned integer type. Alternatives like
strict_strtoul() have
been encouraged instead, but they have problems too, including the lack of
overflow checks. So what's a kernel hacker to do?
As of 2.6.39, there is a new set of string-to-integer converters which is
expected to be used in preference to all others.
- Unsigned conversions can be done with any of kstrtoull(),
kstrtoul(), kstrtouint(), kstrtou64(),
kstrtou32(), kstrtou16(), or kstrtou8().
- Conversions to signed integers can be done with kstrtoll(),
kstrtol(), kstrtoint(), kstrtos64(),
kstrtos32(), kstrtos16(), or kstrtos8().
All of these functions are marked __must_check, so callers are
expected to check to ensure that the conversion happened successfully. The
older functions are marked deprecated, and will eventually be removed.
These new kstrto*() functions are now the Official Best Way To
Convert Strings, so developers need wonder no longer.
(
Log in to post comments)