perf tools: add test for strlcpy()

Some Linux distributions like ALT Linux provides patched glibc with
contains strlcpy(). It's confilcts with strlcpy() from perf.

Let's add check for strlcpy().

Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Ingo Molnar <mingo@elte.hu>
LKML-Reference: <1282351101-8879-1-git-send-email-kirill@shutemov.name>
Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Kirill A. Shutemov 2010-08-21 03:38:20 +03:00 committed by Arnaldo Carvalho de Melo
parent 8b9e74eb8a
commit f4e7ac0a23
4 changed files with 24 additions and 1 deletions

View File

@ -647,6 +647,15 @@ else
endif endif
endif endif
ifdef NO_STRLCPY
BASIC_CFLAGS += -DNO_STRLCPY
else
ifneq ($(call try-cc,$(SOURCE_STRLCPY),),y)
BASIC_CFLAGS += -DNO_STRLCPY
endif
endif
ifndef CC_LD_DYNPATH ifndef CC_LD_DYNPATH
ifdef NO_R_TO_GCC_LINKER ifdef NO_R_TO_GCC_LINKER
# Some gcc does not accept and pass -R to the linker to specify # Some gcc does not accept and pass -R to the linker to specify

View File

@ -110,6 +110,17 @@ int main(void)
} }
endef endef
define SOURCE_STRLCPY
#include <stdlib.h>
extern size_t strlcpy(char *dest, const char *src, size_t size);
int main(void)
{
strlcpy(NULL, NULL, 0);
return 0;
}
endef
# try-cc # try-cc
# Usage: option = $(call try-cc, source-to-build, cc-options) # Usage: option = $(call try-cc, source-to-build, cc-options)
try-cc = $(shell sh -c \ try-cc = $(shell sh -c \

View File

@ -82,6 +82,8 @@ extern char *perf_path(const char *fmt, ...) __attribute__((format (printf, 1, 2
extern char *perf_pathdup(const char *fmt, ...) extern char *perf_pathdup(const char *fmt, ...)
__attribute__((format (printf, 1, 2))); __attribute__((format (printf, 1, 2)));
#ifdef NO_STRLCPY
extern size_t strlcpy(char *dest, const char *src, size_t size); extern size_t strlcpy(char *dest, const char *src, size_t size);
#endif
#endif /* __PERF_CACHE_H */ #endif /* __PERF_CACHE_H */

View File

@ -22,6 +22,7 @@ static const char *get_perf_dir(void)
return "."; return ".";
} }
#ifdef NO_STRLCPY
size_t strlcpy(char *dest, const char *src, size_t size) size_t strlcpy(char *dest, const char *src, size_t size)
{ {
size_t ret = strlen(src); size_t ret = strlen(src);
@ -33,7 +34,7 @@ size_t strlcpy(char *dest, const char *src, size_t size)
} }
return ret; return ret;
} }
#endif
static char *get_pathname(void) static char *get_pathname(void)
{ {