pytdbpack_pack_data: Allow 'd' and 'w' formats to take either Integer
authorMartin Pool <mbp@samba.org>
Mon, 4 Nov 2002 23:08:53 +0000 (23:08 +0000)
committerMartin Pool <mbp@samba.org>
Mon, 4 Nov 2002 23:08:53 +0000 (23:08 +0000)
or Long arguments.

source/python/py_tdbpack.c

index 526e187f75275e8c0c7be145fe67045da604f58f..446a2e548018163744a867764d3f399ef6c207d8 100644 (file)
@@ -588,14 +588,32 @@ pytdbpack_pack_data(const char *format_str,
                        return NULL;
 
                if (ch == 'w') {
-                       unsigned long val_long = PyInt_AsLong(val_obj);
+                       unsigned long val_long;
+                       PyObject *long_obj;
+                       
+                       if (!(long_obj = PyNumber_Long(val_obj))) {
+                               pytdbpack_bad_type(ch, "Long", val_obj);
+                               return NULL;
+                       }
+                       
+                       val_long = PyLong_AsUnsignedLong(long_obj);
                        (packed)[0] = val_long & 0xff;
                        (packed)[1] = (val_long >> 8) & 0xff;
                        (packed) += 2;
+                       Py_DECREF(long_obj);
                }
                else if (ch == 'd') {
                        /* 4-byte LE number */
-                       pack_uint32(PyInt_AsLong(val_obj), &packed);
+                       PyObject *long_obj;
+                       
+                       if (!(long_obj = PyNumber_Long(val_obj))) {
+                               pytdbpack_bad_type(ch, "Long", val_obj);
+                               return NULL;
+                       }
+                       
+                       pack_uint32(PyLong_AsUnsignedLong(long_obj), &packed);
+
+                       Py_DECREF(long_obj);
                }
                else if (ch == 'p') {
                        /* "Pointer" value -- in the subset of DCERPC used by Samba,