Skip to content

Commit

Permalink
perf tools: Move strlcpy() from perf to tools/lib/string.c
Browse files Browse the repository at this point in the history
strlcpy() will be needed by the subcmd library.  Move it to the shared
tools/lib/string.c file which can be used by other tools.

Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/71e2804b973bf39ad3d3b9be10f99f2ea630be46.1450193761.git.jpoimboe@redhat.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Josh Poimboeuf authored and Arnaldo Carvalho de Melo committed Dec 16, 2015
1 parent 1925459 commit ce99091
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 23 deletions.
4 changes: 4 additions & 0 deletions tools/include/linux/string.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,8 @@ void *memdup(const void *src, size_t len);

int strtobool(const char *s, bool *res);

#ifndef __UCLIBC__
extern size_t strlcpy(char *dest, const char *src, size_t size);
#endif

#endif /* _LINUX_STRING_H_ */
27 changes: 27 additions & 0 deletions tools/lib/string.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include <string.h>
#include <errno.h>
#include <linux/string.h>
#include <linux/compiler.h>

/**
* memdup - duplicate region of memory
Expand Down Expand Up @@ -60,3 +61,29 @@ int strtobool(const char *s, bool *res)
}
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;
}
7 changes: 2 additions & 5 deletions tools/perf/util/cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
#include "../perf.h"
#include "../ui/ui.h"

#include <linux/string.h>

#define CMD_EXEC_PATH "--exec-path"
#define CMD_PERF_DIR "--perf-dir="
#define CMD_WORK_TREE "--work-tree="
Expand Down Expand Up @@ -67,9 +69,4 @@ extern char *perf_path(const char *fmt, ...) __attribute__((format (printf, 1, 2
extern char *perf_pathdup(const char *fmt, ...)
__attribute__((format (printf, 1, 2)));

#ifndef __UCLIBC__
/* Matches the libc/libbsd function attribute so we declare this unconditionally: */
extern size_t strlcpy(char *dest, const char *src, size_t size);
#endif

#endif /* __PERF_CACHE_H */
18 changes: 0 additions & 18 deletions tools/perf/util/path.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,24 +22,6 @@ static const char *get_perf_dir(void)
return ".";
}

/*
* 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;
}

static char *get_pathname(void)
{
static char pathname_array[4][PATH_MAX];
Expand Down

0 comments on commit ce99091

Please sign in to comment.