diff options
Diffstat (limited to 'tools/lib/string.c')
| -rw-r--r-- | tools/lib/string.c | 42 | 
1 files changed, 26 insertions, 16 deletions
| diff --git a/tools/lib/string.c b/tools/lib/string.c index 8e678af1c6ee..93b3d4b6feac 100644 --- a/tools/lib/string.c +++ b/tools/lib/string.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   *  linux/tools/lib/string.c   * @@ -39,27 +40,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;  }  /** @@ -87,12 +106,3 @@ size_t __weak strlcpy(char *dest, const char *src, size_t size)  	}  	return ret;  } - -int prefixcmp(const char *str, const char *prefix) -{ -	for (; ; str++, prefix++) -		if (!*prefix) -			return 0; -		else if (*str != *prefix) -			return (unsigned char)*prefix - (unsigned char)*str; -} |