Implement the kstrtobool() and kstrtobool_from_user() functions
in the LinuxKPI. Submitted by: Johannes Lundberg <johalun0@gmail.com> MFC after: 1 week Sponsored by: Mellanox Technologies Sponsored by: Limelight Networks
This commit is contained in:
parent
2ef5e36473
commit
35555d474b
@ -50,7 +50,9 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/log2.h>
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
#include <machine/stdarg.h>
|
||||
|
||||
@ -372,6 +374,46 @@ kstrtou32(const char *cp, unsigned int base, u32 *res)
|
||||
return (0);
|
||||
}
|
||||
|
||||
static inline int
|
||||
kstrtobool(const char *s, bool *res)
|
||||
{
|
||||
int len;
|
||||
|
||||
if (s == NULL || (len = strlen(s)) == 0 || res == NULL)
|
||||
return (-EINVAL);
|
||||
|
||||
/* skip newline character, if any */
|
||||
if (s[len - 1] == '\n')
|
||||
len--;
|
||||
|
||||
if (len == 1 && strchr("yY1", s[0]) != NULL)
|
||||
*res = true;
|
||||
else if (len == 1 && strchr("nN0", s[0]) != NULL)
|
||||
*res = false;
|
||||
else if (strncasecmp("on", s, len) == 0)
|
||||
*res = true;
|
||||
else if (strncasecmp("off", s, len) == 0)
|
||||
*res = false;
|
||||
else
|
||||
return (-EINVAL);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static inline int
|
||||
kstrtobool_from_user(const char __user *s, size_t count, bool *res)
|
||||
{
|
||||
char buf[8] = {};
|
||||
|
||||
if (count > (sizeof(buf) - 1))
|
||||
count = (sizeof(buf) - 1);
|
||||
|
||||
if (copy_from_user(buf, s, count))
|
||||
return (-EFAULT);
|
||||
|
||||
return (kstrtobool(buf, res));
|
||||
}
|
||||
|
||||
#define min(x, y) ((x) < (y) ? (x) : (y))
|
||||
#define max(x, y) ((x) > (y) ? (x) : (y))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user