From f06e30af4a0b556d2144b6fd473afeddbc21bb2f Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 24 Nov 2005 15:37:42 +0000 Subject: bug #1281408: make Py_BuildValue work with unsigned longs and long longs --- Python/modsupport.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'Python/modsupport.c') diff --git a/Python/modsupport.c b/Python/modsupport.c index fbfb48dc26..3b4c517e4c 100644 --- a/Python/modsupport.c +++ b/Python/modsupport.c @@ -303,18 +303,35 @@ do_mkvalue(char **p_format, va_list *p_va) case 'H': return PyInt_FromLong((long)va_arg(*p_va, unsigned int)); + case 'I': + { + unsigned int n; + n = va_arg(*p_va, unsigned int); + if (n > PyInt_GetMax()) + return PyLong_FromUnsignedLong((unsigned long)n); + else + return PyInt_FromLong(n); + } + case 'l': - return PyInt_FromLong((long)va_arg(*p_va, long)); + return PyInt_FromLong(va_arg(*p_va, long)); case 'k': - return PyInt_FromLong((long)va_arg(*p_va, unsigned long)); + { + unsigned long n; + n = va_arg(*p_va, unsigned long); + if (n > PyInt_GetMax()) + return PyLong_FromUnsignedLong(n); + else + return PyInt_FromLong(n); + } #ifdef HAVE_LONG_LONG case 'L': return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG)); case 'K': - return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG)); + return PyLong_FromUnsignedLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG)); #endif #ifdef Py_USING_UNICODE case 'u': -- cgit v1.2.1