Skip to content
  • Alexey Dobriyan's avatar
    kstrto*: converting strings to integers done (hopefully) right · 33ee3b2e
    Alexey Dobriyan authored
    
    
    1. simple_strto*() do not contain overflow checks and crufty,
       libc way to indicate failure.
    2. strict_strto*() also do not have overflow checks but the name and
       comments pretend they do.
    3. Both families have only "long long" and "long" variants,
       but users want strtou8()
    4. Both "simple" and "strict" prefixes are wrong:
       Simple doesn't exactly say what's so simple, strict should not exist
       because conversion should be strict by default.
    
    The solution is to use "k" prefix and add convertors for more types.
    Enter
    	kstrtoull()
    	kstrtoll()
    	kstrtoul()
    	kstrtol()
    	kstrtouint()
    	kstrtoint()
    
    	kstrtou64()
    	kstrtos64()
    	kstrtou32()
    	kstrtos32()
    	kstrtou16()
    	kstrtos16()
    	kstrtou8()
    	kstrtos8()
    
    Include runtime testsuite (somewhat incomplete) as well.
    
    strict_strto*() become deprecated, stubbed to kstrto*() and
    eventually will be removed altogether.
    
    Use kstrto*() in code today!
    
    Note: on some archs _kstrtoul() and _kstrtol() are left in tree, even if
          they'll be unused at runtime. This is temporarily solution,
          because I don't want to hardcode list of archs where these
          functions aren't needed. Current solution with sizeof() and
          __alignof__ at least always works.
    
    Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    33ee3b2e