From: Arnaldo Carvalho de Melo <[email protected]>

Getting support for "on", "off" introduced in a81a5a17d44b ("lib: add
"on"/"off" support to kstrtobool") and making it check for NULL,
introduced in ef951599074b ("lib: move strtobool() to kstrtobool()").

Cc: Adrian Hunter <[email protected]>
Cc: David Ahern <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Wang Nan <[email protected]>
Cc: Kees Cook <[email protected]>
Link: http://lkml.kernel.org/n/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
---
 tools/lib/string.c | 32 +++++++++++++++++++++++++-------
 1 file changed, 25 insertions(+), 7 deletions(-)

diff --git a/tools/lib/string.c b/tools/lib/string.c
index bd239bc1d557..a4246f14ded1 100644
--- a/tools/lib/string.c
+++ b/tools/lib/string.c
@@ -39,27 +39,45 @@ void *memdup(const void *src, size_t len)
  * @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.
+ * This routine returns 0 iff the first character is one of 'Yy1Nn0', or
+ * [oO][NnFf] for "on" and "off". Otherwise it will return -EINVAL.  Value
+ * pointed to by res is updated upon finding a match.
  */
 int strtobool(const char *s, bool *res)
 {
+       if (!s)
+               return -EINVAL;
+
        switch (s[0]) {
        case 'y':
        case 'Y':
        case '1':
                *res = true;
-               break;
+               return 0;
        case 'n':
        case 'N':
        case '0':
                *res = false;
-               break;
+               return 0;
+       case 'o':
+       case 'O':
+               switch (s[1]) {
+               case 'n':
+               case 'N':
+                       *res = true;
+                       return 0;
+               case 'f':
+               case 'F':
+                       *res = false;
+                       return 0;
+               default:
+                       break;
+               }
        default:
-               return -EINVAL;
+               break;
        }
-       return 0;
+
+       return -EINVAL;
 }
 
 /**
-- 
2.9.4

Reply via email to