diff options
Diffstat (limited to 'Python/modsupport.c')
-rw-r--r-- | Python/modsupport.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/Python/modsupport.c b/Python/modsupport.c index 0d093711f5..aabee8fa59 100644 --- a/Python/modsupport.c +++ b/Python/modsupport.c @@ -260,13 +260,12 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags) return PyLong_FromUnsignedLong(n); } -#ifdef HAVE_LONG_LONG case 'L': - return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG)); + return PyLong_FromLongLong((long long)va_arg(*p_va, long long)); case 'K': - return PyLong_FromUnsignedLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG)); -#endif + return PyLong_FromUnsignedLongLong((long long)va_arg(*p_va, unsigned long long)); + case 'u': { PyObject *v; @@ -318,7 +317,7 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags) case 'U': /* XXX deprecated alias */ { PyObject *v; - char *str = va_arg(*p_va, char *); + const char *str = va_arg(*p_va, const char *); Py_ssize_t n; if (**p_format == '#') { ++*p_format; @@ -351,7 +350,7 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags) case 'y': { PyObject *v; - char *str = va_arg(*p_va, char *); + const char *str = va_arg(*p_va, const char *); Py_ssize_t n; if (**p_format == '#') { ++*p_format; @@ -468,8 +467,7 @@ va_build_value(const char *format, va_list va, int flags) const char *f = format; int n = countformat(f, '\0'); va_list lva; - - Py_VA_COPY(lva, va); + PyObject *retval; if (n < 0) return NULL; @@ -477,9 +475,14 @@ va_build_value(const char *format, va_list va, int flags) Py_INCREF(Py_None); return Py_None; } - if (n == 1) - return do_mkvalue(&f, &lva, flags); - return do_mktuple(&f, &lva, '\0', n, flags); + va_copy(lva, va); + if (n == 1) { + retval = do_mkvalue(&f, &lva, flags); + } else { + retval = do_mktuple(&f, &lva, '\0', n, flags); + } + va_end(lva); + return retval; } |