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).
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 2fee461..4b245be 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 8c2dcab..887ff7d 100644
--- a/lib/zebra.h
+++ b/lib/zebra.h
@@ -97,9 +97,17 @@
 #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"