From 0c21214f3e583d541227df2239de377e796b55fa Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 20 Sep 2016 20:39:33 -0700 Subject: [PATCH] replace usage of Py_VA_COPY with the (C99) standard va_copy --- Include/pyport.h | 10 +--------- Objects/abstract.c | 2 +- Objects/unicodeobject.c | 5 ++--- Python/getargs.c | 12 ++++++------ Python/modsupport.c | 2 +- configure | 34 ---------------------------------- configure.ac | 14 -------------- pyconfig.h.in | 3 --- 8 files changed, 11 insertions(+), 71 deletions(-) diff --git a/Include/pyport.h b/Include/pyport.h index ec3c4df423e..20f3db74815 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -723,15 +723,7 @@ extern pid_t forkpty(int *, char *, struct termios *, struct winsize *); #define Py_ULL(x) Py_LL(x##U) #endif -#ifdef VA_LIST_IS_ARRAY -#define Py_VA_COPY(x, y) memcpy((x), (y), sizeof(va_list)) -#else -#ifdef __va_copy -#define Py_VA_COPY __va_copy -#else -#define Py_VA_COPY(x, y) (x) = (y) -#endif -#endif +#define Py_VA_COPY va_copy /* * Convenient macros to deal with endianness of the platform. WORDS_BIGENDIAN is diff --git a/Objects/abstract.c b/Objects/abstract.c index 36f22426ac5..c6c957b302b 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -2683,7 +2683,7 @@ objargs_mkstack(PyObject **small_stack, Py_ssize_t small_stack_size, PyObject **stack; /* Count the number of arguments */ - Py_VA_COPY(countva, va); + va_copy(countva, va); n = 0; while (1) { diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 85cdbb73b7f..f0a908386fe 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -2874,9 +2874,8 @@ PyUnicode_FromFormatV(const char *format, va_list vargs) writer.min_length = strlen(format) + 100; writer.overallocate = 1; - /* va_list may be an array (of 1 item) on some platforms (ex: AMD64). - Copy it to be able to pass a reference to a subfunction. */ - Py_VA_COPY(vargs2, vargs); + // Copy varags to be able to pass a reference to a subfunction. + va_copy(vargs2, vargs); for (f = format; *f; ) { if (*f == '%') { diff --git a/Python/getargs.c b/Python/getargs.c index 87a5d26a880..cd80eda0e23 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -142,7 +142,7 @@ PyArg_VaParse(PyObject *args, const char *format, va_list va) { va_list lva; - Py_VA_COPY(lva, va); + va_copy(lva, va); return vgetargs1(args, format, &lva, 0); } @@ -152,7 +152,7 @@ _PyArg_VaParse_SizeT(PyObject *args, const char *format, va_list va) { va_list lva; - Py_VA_COPY(lva, va); + va_copy(lva, va); return vgetargs1(args, format, &lva, FLAG_SIZE_T); } @@ -1402,7 +1402,7 @@ PyArg_VaParseTupleAndKeywords(PyObject *args, return 0; } - Py_VA_COPY(lva, va); + va_copy(lva, va); retval = vgetargskeywords(args, keywords, format, kwlist, &lva, 0); return retval; @@ -1426,7 +1426,7 @@ _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *args, return 0; } - Py_VA_COPY(lva, va); + va_copy(lva, va); retval = vgetargskeywords(args, keywords, format, kwlist, &lva, FLAG_SIZE_T); @@ -1531,7 +1531,7 @@ _PyArg_VaParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords, return 0; } - Py_VA_COPY(lva, va); + va_copy(lva, va); retval = vgetargskeywordsfast(args, keywords, parser, &lva, 0); return retval; @@ -1552,7 +1552,7 @@ _PyArg_VaParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords, return 0; } - Py_VA_COPY(lva, va); + va_copy(lva, va); retval = vgetargskeywordsfast(args, keywords, parser, &lva, FLAG_SIZE_T); return retval; diff --git a/Python/modsupport.c b/Python/modsupport.c index f3aa91f2b9d..bdaf8b22c58 100644 --- a/Python/modsupport.c +++ b/Python/modsupport.c @@ -468,7 +468,7 @@ va_build_value(const char *format, va_list va, int flags) int n = countformat(f, '\0'); va_list lva; - Py_VA_COPY(lva, va); + va_copy(lva, va); if (n < 0) return NULL; diff --git a/configure b/configure index 87ad9bbe1c9..20cf0e97a01 100755 --- a/configure +++ b/configure @@ -13539,40 +13539,6 @@ $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -va_list_is_array=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether va_list is an array" >&5 -$as_echo_n "checking whether va_list is an array... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#ifdef HAVE_STDARG_PROTOTYPES -#include -#else -#include -#endif - -int -main () -{ -va_list list1, list2; list1 = list2; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - - -$as_echo "#define VA_LIST_IS_ARRAY 1" >>confdefs.h - - va_list_is_array=yes - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $va_list_is_array" >&5 -$as_echo "$va_list_is_array" >&6; } - # sigh -- gethostbyname_r is a mess; it can have 3, 5 or 6 arguments :-( diff --git a/configure.ac b/configure.ac index 0a140dbe96b..d55d38ba677 100644 --- a/configure.ac +++ b/configure.ac @@ -4038,20 +4038,6 @@ x.sa_len = 0;]])], [AC_MSG_RESULT(no)] ) -va_list_is_array=no -AC_MSG_CHECKING(whether va_list is an array) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -#ifdef HAVE_STDARG_PROTOTYPES -#include -#else -#include -#endif -]], [[va_list list1, list2; list1 = list2;]])],[],[ - AC_DEFINE(VA_LIST_IS_ARRAY, 1, [Define if a va_list is an array of some kind]) - va_list_is_array=yes -]) -AC_MSG_RESULT($va_list_is_array) - # sigh -- gethostbyname_r is a mess; it can have 3, 5 or 6 arguments :-( AH_TEMPLATE(HAVE_GETHOSTBYNAME_R, [Define this if you have some version of gethostbyname_r()]) diff --git a/pyconfig.h.in b/pyconfig.h.in index 02d283f6f0f..e7a836c5d42 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -1361,9 +1361,6 @@ #endif -/* Define if a va_list is an array of some kind */ -#undef VA_LIST_IS_ARRAY - /* Define if you want SIGFPE handled (see Include/pyfpe.h). */ #undef WANT_SIGFPE_HANDLER