diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-02-05 04:07:25 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-02-05 04:07:25 +0000 |
commit | 779c18bf238aba630e40c26e10ce8aa278c45d61 (patch) | |
tree | 529c8339b0a3f0fa1d6fd9fafdca7091211353c1 /internal.h | |
parent | bb6c0f03a7c0875c20efc79506316da2cb4c4aed (diff) | |
download | ruby-779c18bf238aba630e40c26e10ce8aa278c45d61.tar.gz |
va_copy is a C99ism
Should provide appropriate fallback implementation.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62220 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'internal.h')
-rw-r--r-- | internal.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/internal.h b/internal.h index 2c65ebcbfc..8ded0e1343 100644 --- a/internal.h +++ b/internal.h @@ -85,6 +85,25 @@ extern "C" { # define STATIC_ASSERT(name, expr) typedef int static_assert_##name##_check[1 - 2*!(expr)] #endif +#if defined(HAVE_VA_COPY) +/* OK, nothing to do */ +#elif defined(HAVE_VA_COPY_MACRO) +#define va_copy(dst, src) VA_COPY((dst), (src)) +#elif defined(HAVE___VA_COPY) +#define va_copy(dst, src) __va_copy((dst), (src)) +#elif defined(HAVE___BUILTIN_VA_COPY) +#define va_copy(dst, src) __builtin_va_copy((dst), (src)) +#elif defined(HAVE_VA_COPY_VIA_STRUCT_ASSIGNMENT) +#define va_copy(dst, src) do (dst) = (src); while (0) +#elif defined(HAVE_VA_COPY_VIA_POINTER_ASSIGNMENT) +#define va_copy(dst, src) do *(dst) = *(src); while (0) +#elif defined(HAVE_VA_COPY_VIA_MEMCPY) +#include <string.h> +#define va_copy(dst, src) memcpy(&(dst), &(src), sizeof(va_list)) +#else +#error >>>> no way to simuate va_copy <<<< +#endif + #define SIGNED_INTEGER_TYPE_P(int_type) (0 > ((int_type)0)-1) #define SIGNED_INTEGER_MAX(sint_type) \ (sint_type) \ |