diff options
-rw-r--r-- | lib/ChangeLog | 5 | ||||
-rw-r--r-- | lib/zebra.h | 12 |
2 files changed, 15 insertions, 2 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog index 2fee4611..4b245bec 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,8 @@ +2005-01-12 Andrew J. Schorr <ajschorr@alumni.princeton.edu> + + * zebra.h: If not C99 and no va_copy macro available, fall back to + memcpy (solves a build problem on FreeBSD 4.x). + 2005-01-04 Andrew J. Schorr <ajschorr@alumni.princeton.edu> * zebra.h: Define ZCMSG_FIRSTHDR appropriately based on whether diff --git a/lib/zebra.h b/lib/zebra.h index 8c2dcaba..887ff7d6 100644 --- a/lib/zebra.h +++ b/lib/zebra.h @@ -97,9 +97,17 @@ typedef int socklen_t; #include <stdarg.h> #if !(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) /* Not C99; do we need to define va_copy? */ -#if !defined(va_copy) && defined(__va_copy) +#ifndef va_copy +#ifdef __va_copy #define va_copy(DST,SRC) __va_copy(DST,SRC) -#endif /* need va_copy */ +#else +/* Now we are desperate; this should work on many typical platforms. + But this is slightly dangerous, because the standard does not require + va_copy to be a macro. */ +#define va_copy(DST,SRC) memcpy(&(DST), &(SRC), sizeof(va_list)) +#warning "Not C99 and no va_copy macro available, falling back to memcpy" +#endif /* __va_copy */ +#endif /* !va_copy */ #endif /* !C99 */ #include "zassert.h" |