diff options
author | Georg Brandl <georg@python.org> | 2005-11-24 15:38:54 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2005-11-24 15:38:54 (GMT) |
commit | b9c3283cc0e0b28231080d8e8ca023de5cb618ff (patch) | |
tree | 45af3543b6dcda21da5240807744be7057f1f3f8 /Python/modsupport.c | |
parent | cfced277da25701300b5aeb3fde0f563ed456eab (diff) | |
download | cpython-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.c | 23 |
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': |