Blame view
tools/lib/string.c
3.23 KB
b24413180 License cleanup: ... |
1 |
// SPDX-License-Identifier: GPL-2.0 |
7d85c4342 tools: Clone the ... |
2 3 4 5 6 7 8 9 10 11 12 13 14 |
/* * 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> */ |
4ddd32741 tools: Adopt memd... |
15 16 |
#include <stdlib.h> #include <string.h> |
7d85c4342 tools: Clone the ... |
17 |
#include <errno.h> |
4ddd32741 tools: Adopt memd... |
18 |
#include <linux/string.h> |
7bd330de4 tools lib: Adopt ... |
19 |
#include <linux/ctype.h> |
ce9909173 perf tools: Move ... |
20 |
#include <linux/compiler.h> |
4ddd32741 tools: Adopt memd... |
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
/** * 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; } |
7d85c4342 tools: Clone the ... |
37 38 39 40 41 42 |
/** * strtobool - convert common user inputs into boolean values * @s: input string * @res: result * |
b99e4850d tools lib: Update... |
43 44 45 |
* 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. |
7d85c4342 tools: Clone the ... |
46 47 48 |
*/ int strtobool(const char *s, bool *res) { |
b99e4850d tools lib: Update... |
49 50 |
if (!s) return -EINVAL; |
7d85c4342 tools: Clone the ... |
51 52 53 54 55 |
switch (s[0]) { case 'y': case 'Y': case '1': *res = true; |
b99e4850d tools lib: Update... |
56 |
return 0; |
7d85c4342 tools: Clone the ... |
57 58 59 60 |
case 'n': case 'N': case '0': *res = false; |
b99e4850d tools lib: Update... |
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
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; } |
7d85c4342 tools: Clone the ... |
76 |
default: |
b99e4850d tools lib: Update... |
77 |
break; |
7d85c4342 tools: Clone the ... |
78 |
} |
b99e4850d tools lib: Update... |
79 80 |
return -EINVAL; |
7d85c4342 tools: Clone the ... |
81 |
} |
ce9909173 perf tools: Move ... |
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
/** * 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; } |
7bd330de4 tools lib: Adopt ... |
108 109 110 111 112 113 114 115 116 117 118 119 120 |
/** * skip_spaces - Removes leading whitespace from @str. * @str: The string to be stripped. * * Returns a pointer to the first non-whitespace character in @str. */ char *skip_spaces(const char *str) { while (isspace(*str)) ++str; return (char *)str; } |
45bfd0ac7 tools lib: Adopt ... |
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
/** * strim - Removes leading and trailing whitespace from @s. * @s: The string to be stripped. * * Note that the first trailing whitespace is replaced with a %NUL-terminator * in the given string @s. Returns a pointer to the first non-whitespace * character in @s. */ char *strim(char *s) { size_t size; char *end; size = strlen(s); if (!size) return s; end = s + size - 1; while (end >= s && isspace(*end)) end--; *(end + 1) = '\0'; return skip_spaces(s); } |
2a60689a3 tools lib: Adopt ... |
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
/** * strreplace - Replace all occurrences of character in string. * @s: The string to operate on. * @old: The character being replaced. * @new: The character @old is replaced with. * * Returns pointer to the nul byte at the end of @s. */ char *strreplace(char *s, char old, char new) { for (; *s; ++s) if (*s == old) *s = new; return s; } |