Fix SF # 640557, '64-bit' systems and the dbm module

datum.dsize can apparently be long on some systems.
Ensure we pass an int* to PyArg_Parse("s#"), not &datum.dsize

Will backport.
diff --git a/Modules/dbmmodule.c b/Modules/dbmmodule.c
index f9ea7d0..40d06fc 100644
--- a/Modules/dbmmodule.c
+++ b/Modules/dbmmodule.c
@@ -94,10 +94,12 @@
 dbm_subscript(dbmobject *dp, register PyObject *key)
 {
 	datum drec, krec;
+	int tmp_size;
 	
-	if (!PyArg_Parse(key, "s#", &krec.dptr, &krec.dsize) )
+	if (!PyArg_Parse(key, "s#", &krec.dptr, &tmp_size) )
 		return NULL;
 	
+	krec.dsize = tmp_size;
         check_dbmobject_open(dp);
 	drec = dbm_fetch(dp->di_dbm, krec);
 	if ( drec.dptr == 0 ) {
@@ -117,12 +119,14 @@
 dbm_ass_sub(dbmobject *dp, PyObject *v, PyObject *w)
 {
         datum krec, drec;
+	int tmp_size;
 	
-        if ( !PyArg_Parse(v, "s#", &krec.dptr, &krec.dsize) ) {
+        if ( !PyArg_Parse(v, "s#", &krec.dptr, &tmp_size) ) {
 		PyErr_SetString(PyExc_TypeError,
 				"dbm mappings have string indices only");
 		return -1;
 	}
+	krec.dsize = tmp_size;
         if (dp->di_dbm == NULL) {
                  PyErr_SetString(DbmError, "DBM object has already been closed"); 
                  return -1;
@@ -136,11 +140,12 @@
 			return -1;
 		}
 	} else {
-		if ( !PyArg_Parse(w, "s#", &drec.dptr, &drec.dsize) ) {
+		if ( !PyArg_Parse(w, "s#", &drec.dptr, &tmp_size) ) {
 			PyErr_SetString(PyExc_TypeError,
 				     "dbm mappings have string elements only");
 			return -1;
 		}
+		drec.dsize = tmp_size;
 		if ( dbm_store(dp->di_dbm, krec, drec, DBM_REPLACE) < 0 ) {
 			dbm_clearerr(dp->di_dbm);
 			PyErr_SetString(DbmError,
@@ -208,9 +213,11 @@
 dbm_has_key(register dbmobject *dp, PyObject *args)
 {
 	datum key, val;
+	int tmp_size;
 	
-	if (!PyArg_ParseTuple(args, "s#:has_key", &key.dptr, &key.dsize))
+	if (!PyArg_ParseTuple(args, "s#:has_key", &key.dptr, &tmp_size))
 		return NULL;
+	key.dsize = tmp_size;
         check_dbmobject_open(dp);
 	val = dbm_fetch(dp->di_dbm, key);
 	return PyInt_FromLong(val.dptr != NULL);
@@ -221,10 +228,12 @@
 {
 	datum key, val;
 	PyObject *defvalue = Py_None;
+	int tmp_size;
 
 	if (!PyArg_ParseTuple(args, "s#|O:get",
-                              &key.dptr, &key.dsize, &defvalue))
+                              &key.dptr, &tmp_size, &defvalue))
 		return NULL;
+	key.dsize = tmp_size;
         check_dbmobject_open(dp);
 	val = dbm_fetch(dp->di_dbm, key);
 	if (val.dptr != NULL)
@@ -240,10 +249,12 @@
 {
 	datum key, val;
 	PyObject *defvalue = NULL;
+	int tmp_size;
 
 	if (!PyArg_ParseTuple(args, "s#|S:setdefault",
-                              &key.dptr, &key.dsize, &defvalue))
+                              &key.dptr, &tmp_size, &defvalue))
 		return NULL;
+	key.dsize = tmp_size;
         check_dbmobject_open(dp);
 	val = dbm_fetch(dp->di_dbm, key);
 	if (val.dptr != NULL)