summaryrefslogtreecommitdiff
path: root/psycopg/python.h
diff options
context:
space:
mode:
authorJason Erickson <jerickso@stickpeople.com>2011-02-18 23:57:25 -0700
committerJason Erickson <jerickso@stickpeople.com>2011-02-18 23:57:25 -0700
commit4bc47d47a5e4570a66b1da393776c4a306feecb6 (patch)
tree1ff425bbf1179ab4a1c94196307d5bf7db325e61 /psycopg/python.h
parent4fdc22451e4f5fa6b9341ce146f621eadc1b389b (diff)
downloadpsycopg2-4bc47d47a5e4570a66b1da393776c4a306feecb6.tar.gz
Python 3.2 hash() return value is arch dependant
Python 3.2 hash() function will now return a 64bit value when run on a 64bit architecture, where as previously, it would always return a 32bit value. Modified the code to use the now Py_hash_t typedef and for Python versions less than 3.2, hard code Py_hash_t to long and Py_uhash_t to unsigned long.
Diffstat (limited to 'psycopg/python.h')
-rw-r--r--psycopg/python.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/psycopg/python.h b/psycopg/python.h
index c3f9a0d..fed0303 100644
--- a/psycopg/python.h
+++ b/psycopg/python.h
@@ -54,6 +54,15 @@
#define CONV_CODE_PY_SSIZE_T "n"
#endif
+/* hash() return size changed around version 3.2a4 on 64bit platforms. Before
+ * this, the return size was always a long, regardless of arch. ~3.2
+ * introduced the Py_hash_t & Py_uhash_t typedefs with the resulting sizes
+ * based upon arch. */
+#if PY_VERSION_HEX < 0x030200A4
+typedef long Py_hash_t;
+typedef unsigned long Py_uhash_t;
+#endif
+
/* Macros defined in Python 2.6 */
#ifndef Py_REFCNT
#define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)