diff options
| -rw-r--r-- | tools/include/linux/string.h | 4 | ||||
| -rw-r--r-- | tools/lib/string.c | 27 | ||||
| -rw-r--r-- | tools/perf/util/cache.h | 7 | ||||
| -rw-r--r-- | tools/perf/util/path.c | 18 |
4 files changed, 33 insertions, 23 deletions
diff --git a/tools/include/linux/string.h b/tools/include/linux/string.h index 2e2f736c039c..e26223f1f287 100644 --- a/tools/include/linux/string.h +++ b/tools/include/linux/string.h | |||
| @@ -8,4 +8,8 @@ void *memdup(const void *src, size_t len); | |||
| 8 | 8 | ||
| 9 | int strtobool(const char *s, bool *res); | 9 | int strtobool(const char *s, bool *res); |
| 10 | 10 | ||
| 11 | #ifndef __UCLIBC__ | ||
| 12 | extern size_t strlcpy(char *dest, const char *src, size_t size); | ||
| 13 | #endif | ||
| 14 | |||
| 11 | #endif /* _LINUX_STRING_H_ */ | 15 | #endif /* _LINUX_STRING_H_ */ |
diff --git a/tools/lib/string.c b/tools/lib/string.c index 065e54f42d8f..bd239bc1d557 100644 --- a/tools/lib/string.c +++ b/tools/lib/string.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <string.h> | 16 | #include <string.h> |
| 17 | #include <errno.h> | 17 | #include <errno.h> |
| 18 | #include <linux/string.h> | 18 | #include <linux/string.h> |
| 19 | #include <linux/compiler.h> | ||
| 19 | 20 | ||
| 20 | /** | 21 | /** |
| 21 | * memdup - duplicate region of memory | 22 | * memdup - duplicate region of memory |
| @@ -60,3 +61,29 @@ int strtobool(const char *s, bool *res) | |||
| 60 | } | 61 | } |
| 61 | return 0; | 62 | return 0; |
| 62 | } | 63 | } |
| 64 | |||
| 65 | /** | ||
| 66 | * strlcpy - Copy a C-string into a sized buffer | ||
| 67 | * @dest: Where to copy the string to | ||
| 68 | * @src: Where to copy the string from | ||
| 69 | * @size: size of destination buffer | ||
| 70 | * | ||
| 71 | * Compatible with *BSD: the result is always a valid | ||
| 72 | * NUL-terminated string that fits in the buffer (unless, | ||
| 73 | * of course, the buffer size is zero). It does not pad | ||
| 74 | * out the result like strncpy() does. | ||
| 75 | * | ||
| 76 | * If libc has strlcpy() then that version will override this | ||
| 77 | * implementation: | ||
| 78 | */ | ||
| 79 | size_t __weak strlcpy(char *dest, const char *src, size_t size) | ||
| 80 | { | ||
| 81 | size_t ret = strlen(src); | ||
| 82 | |||
| 83 | if (size) { | ||
| 84 | size_t len = (ret >= size) ? size - 1 : ret; | ||
| 85 | memcpy(dest, src, len); | ||
| 86 | dest[len] = '\0'; | ||
| 87 | } | ||
| 88 | return ret; | ||
| 89 | } | ||
diff --git a/tools/perf/util/cache.h b/tools/perf/util/cache.h index 9ca4a58f160d..d723ecb9b959 100644 --- a/tools/perf/util/cache.h +++ b/tools/perf/util/cache.h | |||
| @@ -8,6 +8,8 @@ | |||
| 8 | #include "../perf.h" | 8 | #include "../perf.h" |
| 9 | #include "../ui/ui.h" | 9 | #include "../ui/ui.h" |
| 10 | 10 | ||
| 11 | #include <linux/string.h> | ||
| 12 | |||
| 11 | #define CMD_EXEC_PATH "--exec-path" | 13 | #define CMD_EXEC_PATH "--exec-path" |
| 12 | #define CMD_PERF_DIR "--perf-dir=" | 14 | #define CMD_PERF_DIR "--perf-dir=" |
| 13 | #define CMD_WORK_TREE "--work-tree=" | 15 | #define CMD_WORK_TREE "--work-tree=" |
| @@ -67,9 +69,4 @@ extern char *perf_path(const char *fmt, ...) __attribute__((format (printf, 1, 2 | |||
| 67 | extern char *perf_pathdup(const char *fmt, ...) | 69 | extern char *perf_pathdup(const char *fmt, ...) |
| 68 | __attribute__((format (printf, 1, 2))); | 70 | __attribute__((format (printf, 1, 2))); |
| 69 | 71 | ||
| 70 | #ifndef __UCLIBC__ | ||
| 71 | /* Matches the libc/libbsd function attribute so we declare this unconditionally: */ | ||
| 72 | extern size_t strlcpy(char *dest, const char *src, size_t size); | ||
| 73 | #endif | ||
| 74 | |||
| 75 | #endif /* __PERF_CACHE_H */ | 72 | #endif /* __PERF_CACHE_H */ |
diff --git a/tools/perf/util/path.c b/tools/perf/util/path.c index 5d13cb45b317..3654d964e49d 100644 --- a/tools/perf/util/path.c +++ b/tools/perf/util/path.c | |||
| @@ -22,24 +22,6 @@ static const char *get_perf_dir(void) | |||
| 22 | return "."; | 22 | return "."; |
| 23 | } | 23 | } |
| 24 | 24 | ||
| 25 | /* | ||
| 26 | * If libc has strlcpy() then that version will override this | ||
| 27 | * implementation: | ||
| 28 | */ | ||
| 29 | size_t __weak strlcpy(char *dest, const char *src, size_t size) | ||
| 30 | { | ||
| 31 | size_t ret = strlen(src); | ||
| 32 | |||
| 33 | if (size) { | ||
| 34 | size_t len = (ret >= size) ? size - 1 : ret; | ||
| 35 | |||
| 36 | memcpy(dest, src, len); | ||
| 37 | dest[len] = '\0'; | ||
| 38 | } | ||
| 39 | |||
| 40 | return ret; | ||
| 41 | } | ||
| 42 | |||
| 43 | static char *get_pathname(void) | 25 | static char *get_pathname(void) |
| 44 | { | 26 | { |
| 45 | static char pathname_array[4][PATH_MAX]; | 27 | static char pathname_array[4][PATH_MAX]; |
