diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2016-04-29 11:05:50 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2016-04-29 11:29:25 +0200 |
commit | 22b8e9415d29c1e11cef0efb0aafd5ebd78cb51b (patch) | |
tree | 7ebb91e869322cda6ff04a190db6ed8ab32b1188 /lib | |
parent | 941056dad1cb46f200b3268d003460db2bd02604 (diff) | |
download | barebox-22b8e9415d29c1e11cef0efb0aafd5ebd78cb51b.tar.gz barebox-22b8e9415d29c1e11cef0efb0aafd5ebd78cb51b.tar.xz |
string: Introduce strtobool
We have at least two places which convert a string to a boolean type,
so create a common function for this. strtobool treats
- any positive (nonzero) number as true
- "0" as false
- "true" (case insensitive) as true
- "false" (case insensitive) as false
Every other value results in an error and the input *val is not
modified. The caller is expected to initialize *val with the correct
default before calling strtobool.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/string.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/string.c b/lib/string.c index 6a39eb5ced..a3e9fd819b 100644 --- a/lib/string.c +++ b/lib/string.c @@ -739,3 +739,46 @@ void *memdup(const void *orig, size_t size) return buf; } EXPORT_SYMBOL(memdup); + +/** + * strtobool - convert a string to a boolean value + * @str - The string + * @val - The boolean value returned. + * + * This function treats + * - any positive (nonzero) number as true + * - "0" as false + * - "true" (case insensitive) as true + * - "false" (case insensitive) as false + * + * Every other value results in an error and the @val is not + * modified. The caller is expected to initialize @val with the + * correct default before calling strtobool. + * + * Returns 0 for success or negative error code if the variable does + * not exist or contains something this function does not recognize + * as true or false. + */ +int strtobool(const char *str, int *val) +{ + if (!str || !*str) + return -EINVAL; + + if (simple_strtoul(str, NULL, 0) > 0) { + *val = true; + return 0; + } + + if (!strcmp(str, "0") || !strcasecmp(str, "false")) { + *val = false; + return 0; + } + + if (!strcasecmp(str, "true")) { + *val = true; + return 0; + } + + return -EINVAL; +} +EXPORT_SYMBOL(strtobool); |