mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
lib: move strtobool() to kstrtobool()
Create the kstrtobool_from_user() helper and move strtobool() logic into the new kstrtobool() (matching all the other kstrto* functions). Provides an inline wrapper for existing strtobool() callers. Signed-off-by: Kees Cook <[email protected]> Cc: Joe Perches <[email protected]> Cc: Andy Shevchenko <[email protected]> Cc: Rasmus Villemoes <[email protected]> Cc: Daniel Borkmann <[email protected]> Cc: Amitkumar Karwar <[email protected]> Cc: Nishant Sarmukadam <[email protected]> Cc: Kalle Valo <[email protected]> Cc: Steve French <[email protected]> Cc: Michael Ellerman <[email protected]> Cc: Heiko Carstens <[email protected]> Cc: Martin Schwidefsky <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
e3bde9568d
commit
ef95159907
4 changed files with 57 additions and 30 deletions
|
|
@ -321,6 +321,56 @@ int kstrtos8(const char *s, unsigned int base, s8 *res)
|
|||
}
|
||||
EXPORT_SYMBOL(kstrtos8);
|
||||
|
||||
/**
|
||||
* kstrtobool - convert common user inputs into boolean values
|
||||
* @s: input string
|
||||
* @res: result
|
||||
*
|
||||
* This routine returns 0 iff the first character is one of 'Yy1Nn0'.
|
||||
* Otherwise it will return -EINVAL. Value pointed to by res is
|
||||
* updated upon finding a match.
|
||||
*/
|
||||
int kstrtobool(const char *s, bool *res)
|
||||
{
|
||||
if (!s)
|
||||
return -EINVAL;
|
||||
|
||||
switch (s[0]) {
|
||||
case 'y':
|
||||
case 'Y':
|
||||
case '1':
|
||||
*res = true;
|
||||
return 0;
|
||||
case 'n':
|
||||
case 'N':
|
||||
case '0':
|
||||
*res = false;
|
||||
return 0;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
EXPORT_SYMBOL(kstrtobool);
|
||||
|
||||
/*
|
||||
* Since "base" would be a nonsense argument, this open-codes the
|
||||
* _from_user helper instead of using the helper macro below.
|
||||
*/
|
||||
int kstrtobool_from_user(const char __user *s, size_t count, bool *res)
|
||||
{
|
||||
/* Longest string needed to differentiate, newline, terminator */
|
||||
char buf[4];
|
||||
|
||||
count = min(count, sizeof(buf) - 1);
|
||||
if (copy_from_user(buf, s, count))
|
||||
return -EFAULT;
|
||||
buf[count] = '\0';
|
||||
return kstrtobool(buf, res);
|
||||
}
|
||||
EXPORT_SYMBOL(kstrtobool_from_user);
|
||||
|
||||
#define kstrto_from_user(f, g, type) \
|
||||
int f(const char __user *s, size_t count, unsigned int base, type *res) \
|
||||
{ \
|
||||
|
|
|
|||
Loading…
Reference in a new issue