summaryrefslogtreecommitdiffstats
path: root/Python/modsupport.c
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2005-11-24 15:38:54 (GMT)
committerGeorg Brandl <georg@python.org>2005-11-24 15:38:54 (GMT)
commitb9c3283cc0e0b28231080d8e8ca023de5cb618ff (patch)
tree45af3543b6dcda21da5240807744be7057f1f3f8 /Python/modsupport.c
parentcfced277da25701300b5aeb3fde0f563ed456eab (diff)
downloadcpython-b9c3283cc0e0b28231080d8e8ca023de5cb618ff.zip
cpython-b9c3283cc0e0b28231080d8e8ca023de5cb618ff.tar.gz
cpython-b9c3283cc0e0b28231080d8e8ca023de5cb618ff.tar.bz2
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Diffstat (limited to 'Python/modsupport.c')
-rw-r--r--Python/modsupport.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/Python/modsupport.c b/Python/modsupport.c
index fbfb48d..3b4c517 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':