From 94ff7ab217d5bf0104fa16af55272c65603aac4f Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Tue, 30 Jun 2015 16:26:34 -0500
Subject: [PATCH] Work around Py26 struct packing bug

---
 pyopencl/_pvt_struct.py | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/pyopencl/_pvt_struct.py b/pyopencl/_pvt_struct.py
index f7461e50..fa871868 100644
--- a/pyopencl/_pvt_struct.py
+++ b/pyopencl/_pvt_struct.py
@@ -29,6 +29,7 @@ THE SOFTWARE.
 
 #import pyopencl._cl as _cl
 import pyopencl.cffi_cl as _cl
+import sys
 from struct import pack as _pack
 
 _size_t_char = ({
@@ -42,10 +43,29 @@ _type_char_map = {
     'N': _size_t_char
 }
 del _size_t_char
-def pack(type_char, obj):
+
+
+def pack_normal(type_char, obj):
+    if type_char == 'F':
+        return _pack('f', obj.real) + _pack('f', obj.imag)
+    elif type_char == "D":
+        return _pack('d', obj.real) + _pack('d', obj.imag)
+    else:
+        return _pack(_type_char_map.get(type_char, type_char), obj)
+
+
+def pack_py26(type_char, obj):
     if type_char == 'F':
         return _pack('f', obj.real) + _pack('f', obj.imag)
     elif type_char == "D":
         return _pack('d', obj.real) + _pack('d', obj.imag)
+    elif type_char in "LD":
+        return _pack(type_char, long(obj))
     else:
         return _pack(_type_char_map.get(type_char, type_char), obj)
+
+
+if (2, 6) <= sys.version_info < (2, 7):
+    pack = pack_py26
+else:
+    pack = pack_normal
-- 
GitLab