Skip to content

Commit d0f1fed

Browse files
Jonathan Cameronrustyrussell
Jonathan Cameron
authored andcommitted
Add a strtobool function matching semantics of existing in kernel equivalents
This is a rename of the usr_strtobool proposal, which was a renamed, relocated and fixed version of previous kstrtobool RFC Signed-off-by: Jonathan Cameron <[email protected]> Signed-off-by: Rusty Russell <[email protected]>
1 parent 6845756 commit d0f1fed

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

include/linux/string.h

+1
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ extern char **argv_split(gfp_t gfp, const char *str, int *argcp);
123123
extern void argv_free(char **argv);
124124

125125
extern bool sysfs_streq(const char *s1, const char *s2);
126+
extern int strtobool(const char *s, bool *res);
126127

127128
#ifdef CONFIG_BINARY_PRINTF
128129
int vbin_printf(u32 *bin_buf, size_t size, const char *fmt, va_list args);

lib/string.c

+29
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,35 @@ bool sysfs_streq(const char *s1, const char *s2)
535535
}
536536
EXPORT_SYMBOL(sysfs_streq);
537537

538+
/**
539+
* strtobool - convert common user inputs into boolean values
540+
* @s: input string
541+
* @res: result
542+
*
543+
* This routine returns 0 iff the first character is one of 'Yy1Nn0'.
544+
* Otherwise it will return -EINVAL. Value pointed to by res is
545+
* updated upon finding a match.
546+
*/
547+
int strtobool(const char *s, bool *res)
548+
{
549+
switch (s[0]) {
550+
case 'y':
551+
case 'Y':
552+
case '1':
553+
*res = true;
554+
break;
555+
case 'n':
556+
case 'N':
557+
case '0':
558+
*res = false;
559+
break;
560+
default:
561+
return -EINVAL;
562+
}
563+
return 0;
564+
}
565+
EXPORT_SYMBOL(strtobool);
566+
538567
#ifndef __HAVE_ARCH_MEMSET
539568
/**
540569
* memset - Fill a region of memory with the given value

0 commit comments

Comments
 (0)