X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/c4c02c552afaadc2a78b9df2aa22559dd1587f40..ce5524496cf016f06c8004e00ce9d043f4ac6aff:/src/src/macros.h diff --git a/src/src/macros.h b/src/src/macros.h index 161a6a181..aa4acd1c8 100644 --- a/src/src/macros.h +++ b/src/src/macros.h @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/macros.h,v 1.36 2007/08/22 10:10:23 ph10 Exp $ */ +/* $Cambridge: exim/src/src/macros.h,v 1.37 2008/09/29 11:41:07 nm4 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -840,4 +840,19 @@ explicit port number. */ enum { FILTER_UNSET, FILTER_FORWARD, FILTER_EXIM, FILTER_SIEVE }; +/* C99 defines va_copy() for copying a varargs ap so that it can be reused, +since on some platforms multiple iterations of va_start()/va_end() are not +supported. But va_copy() is itself not so portable. Hack around it. +See portability notes at: http://unixpapa.com/incnote/variadic.html */ + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +/* va_copy exists for us or the system is broken and we need OS hacks */ +#elif defined(va_copy) +/* trust it; hope that va_copy is always a macro when defined */ +#elif !defined(va_copy) && defined(__va_copy) +#define va_copy(dest, src) __va_copy(dest, src) +#else +#define va_copy(dest, src) do { memcpy(dest, src, sizeof(va_list) } while (0) +#endif + /* End of macros.h */