bug #1281408: make Py_BuildValue work with unsigned longs and long longs

This commit is contained in:
Georg Brandl 2005-11-24 15:37:42 +00:00
parent 9df23ea1fc
commit f06e30af4a
3 changed files with 47 additions and 5 deletions

View file

@ -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':