[Python-checkins] commit of r41527 - in python/trunk: Doc/api Misc Python

reinhold.birkenfeld@python.org reinhold.birkenfeld at python.org
Thu Nov 24 16:37:48 CET 2005


Author: reinhold.birkenfeld
Date: Thu Nov 24 16:37:42 2005
New Revision: 41527
Modified:
 python/trunk/Doc/api/utilities.tex
 python/trunk/Misc/NEWS
 python/trunk/Python/modsupport.c
Log:
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Modified: python/trunk/Doc/api/utilities.tex
==============================================================================
--- python/trunk/Doc/api/utilities.tex	(original)
+++ python/trunk/Doc/api/utilities.tex	Thu Nov 24 16:37:42 2005
@@ -836,14 +836,36 @@
 Convert a plain C \ctype{int} to a Python integer object.
 
 \item[\samp{b} (integer) {[char]}]
- Same as \samp{i}.
+ Convert a plain C \ctype{char} to a Python integer object.
 
 \item[\samp{h} (integer) {[short int]}]
- Same as \samp{i}.
+ Convert a plain C \ctype{short int} to a Python integer object.
 
 \item[\samp{l} (integer) {[long int]}]
 Convert a C \ctype{long int} to a Python integer object.
 
+ \item[\samp{B} (integer) {[unsigned char]}]
+ Convert a C \ctype{unsigned char} to a Python integer object.
+
+ \item[\samp{H} (integer) {[unsigned short int]}]
+ Convert a C \ctype{unsigned short int} to a Python integer object.
+
+ \item[\samp{I} (integer/long) {[unsigned int]}]
+ Convert a C \ctype{unsigned int} to a Python integer object
+ or a Python long integer object, if it is larger than \code{sys.maxint}.
+
+ \item[\samp{k} (integer/long) {[unsigned long]}]
+ Convert a C \ctype{unsigned long} to a Python integer object
+ or a Python long integer object, if it is larger than \code{sys.maxint}.
+
+ \item[\samp{L} (long) {[PY_LONG_LONG]}]
+ Convert a C \ctype{long long} to a Python long integer object. Only
+ available on platforms that support \ctype{long long}.
+
+ \item[\samp{K} (long) {[unsigned PY_LONG_LONG]}]
+ Convert a C \ctype{unsigned long long} to a Python long integer object.
+ Only available on platforms that support \ctype{unsigned long long}.
+
 \item[\samp{c} (string of length 1) {[char]}]
 Convert a C \ctype{int} representing a character to a Python
 string of length 1.
Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Thu Nov 24 16:37:42 2005
@@ -12,6 +12,9 @@
 Core and builtins
 -----------------
 
+- Bug #1281408: Py_BuildValue now works correct even with unsigned longs
+ and long longs.
+
 - SF Bug #1350188, "setdlopenflags" leads to crash upon "import"
 It was possible dlerror() returns a NULL pointer, use a default error
 message in this case.
Modified: python/trunk/Python/modsupport.c
==============================================================================
--- python/trunk/Python/modsupport.c	(original)
+++ python/trunk/Python/modsupport.c	Thu Nov 24 16:37:42 2005
@@ -303,18 +303,35 @@
 		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':


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /