On 01/19/2013 08:07 PM, Assaf Gordon wrote: > Which looks like some macro expansion, but I couldn't find the declaration of > this macro.
It's because stpncpy.c earlier has this: # define __stpncpy stpncpy which means that this: char * __stpncpy (char *dest, const char *src, size_t n) { expands to this: char * stpncpy (char *dest, const char *src, size_t n) { which in turn is expanded by the stpncpy macro in the system string.h, to this: char * ((__builtin_object_size (char *dest, 0) != (size_t) -1) ? __builtin___stpncpy_chk (char *dest, const char *src, size_t n, __builtin_object_size (char *dest, 2 > 1)) : __inline_stpncpy_chk (char *dest, const char *src, size_t n)) { which is obviously bogus. Does something like the following patch fix things for you? diff --git a/lib/stpncpy.c b/lib/stpncpy.c index 466cd5f..8b14fb9 100644 --- a/lib/stpncpy.c +++ b/lib/stpncpy.c @@ -31,7 +31,7 @@ /* Copy no more than N bytes of SRC to DST, returning a pointer past the last non-NUL byte written into DST. */ char * -__stpncpy (char *dest, const char *src, size_t n) +(__stpncpy) (char *dest, const char *src, size_t n) { char c; char *s = dest;