diff options
Diffstat (limited to 'tools/lib/string.c')
| -rw-r--r-- | tools/lib/string.c | 89 | 
1 files changed, 89 insertions, 0 deletions
diff --git a/tools/lib/string.c b/tools/lib/string.c new file mode 100644 index 000000000000..bd239bc1d557 --- /dev/null +++ b/tools/lib/string.c @@ -0,0 +1,89 @@ +/* + *  linux/tools/lib/string.c + * + *  Copied from linux/lib/string.c, where it is: + * + *  Copyright (C) 1991, 1992  Linus Torvalds + * + *  More specifically, the first copied function was strtobool, which + *  was introduced by: + * + *  d0f1fed29e6e ("Add a strtobool function matching semantics of existing in kernel equivalents") + *  Author: Jonathan Cameron <jic23@cam.ac.uk> + */ + +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <linux/string.h> +#include <linux/compiler.h> + +/** + * memdup - duplicate region of memory + * + * @src: memory region to duplicate + * @len: memory region length + */ +void *memdup(const void *src, size_t len) +{ +	void *p = malloc(len); + +	if (p) +		memcpy(p, src, len); + +	return p; +} + +/** + * strtobool - convert common user inputs into boolean values + * @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. + */ +int strtobool(const char *s, bool *res) +{ +	switch (s[0]) { +	case 'y': +	case 'Y': +	case '1': +		*res = true; +		break; +	case 'n': +	case 'N': +	case '0': +		*res = false; +		break; +	default: +		return -EINVAL; +	} +	return 0; +} + +/** + * strlcpy - Copy a C-string into a sized buffer + * @dest: Where to copy the string to + * @src: Where to copy the string from + * @size: size of destination buffer + * + * Compatible with *BSD: the result is always a valid + * NUL-terminated string that fits in the buffer (unless, + * of course, the buffer size is zero). It does not pad + * out the result like strncpy() does. + * + * If libc has strlcpy() then that version will override this + * implementation: + */ +size_t __weak strlcpy(char *dest, const char *src, size_t size) +{ +	size_t ret = strlen(src); + +	if (size) { +		size_t len = (ret >= size) ? size - 1 : ret; +		memcpy(dest, src, len); +		dest[len] = '\0'; +	} +	return ret; +}  | 
