[Python-checkins] python/dist/src/Modules dbmmodule.c,2.28,2.28.6.1

nnorwitz@users.sourceforge.net nnorwitz@users.sourceforge.net
Fri, 22 Nov 2002 15:29:49 -0800


Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1:/tmp/cvs-serv8539/Modules

Modified Files:
      Tag: release22-maint
	dbmmodule.c 
Log Message:
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



Index: dbmmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/dbmmodule.c,v
retrieving revision 2.28
retrieving revision 2.28.6.1
diff -C2 -d -r2.28 -r2.28.6.1
*** dbmmodule.c	8 Dec 2001 18:02:56 -0000	2.28
--- dbmmodule.c	22 Nov 2002 23:29:47 -0000	2.28.6.1
***************
*** 91,98 ****
  {
  	datum drec, krec;
  	
! 	if (!PyArg_Parse(key, "s#", &krec.dptr, &krec.dsize) )
  		return NULL;
  	
          check_dbmobject_open(dp);
  	drec = dbm_fetch(dp->di_dbm, krec);
--- 91,100 ----
  {
  	datum drec, krec;
+ 	int tmp_size;
  	
! 	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);
***************
*** 114,123 ****
  {
          datum krec, drec;
  	
!         if ( !PyArg_Parse(v, "s#", &krec.dptr, &krec.dsize) ) {
  		PyErr_SetString(PyExc_TypeError,
  				"dbm mappings have string indices only");
  		return -1;
  	}
          if (dp->di_dbm == NULL) {
                   PyErr_SetString(DbmError, "DBM object has already been closed"); 
--- 116,127 ----
  {
          datum krec, drec;
+ 	int tmp_size;
  	
!         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"); 
***************
*** 133,141 ****
  		}
  	} else {
! 		if ( !PyArg_Parse(w, "s#", &drec.dptr, &drec.dsize) ) {
  			PyErr_SetString(PyExc_TypeError,
  				     "dbm mappings have string elements only");
  			return -1;
  		}
  		if ( dbm_store(dp->di_dbm, krec, drec, DBM_REPLACE) < 0 ) {
  			dbm_clearerr(dp->di_dbm);
--- 137,146 ----
  		}
  	} else {
! 		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);
***************
*** 205,211 ****
  {
  	datum key, val;
  	
! 	if (!PyArg_ParseTuple(args, "s#:has_key", &key.dptr, &key.dsize))
  		return NULL;
          check_dbmobject_open(dp);
  	val = dbm_fetch(dp->di_dbm, key);
--- 210,218 ----
  {
  	datum key, val;
+ 	int tmp_size;
  	
! 	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);
***************
*** 218,225 ****
  	datum key, val;
  	PyObject *defvalue = Py_None;
  
  	if (!PyArg_ParseTuple(args, "s#|O:get",
!                               &key.dptr, &key.dsize, &defvalue))
  		return NULL;
          check_dbmobject_open(dp);
  	val = dbm_fetch(dp->di_dbm, key);
--- 225,234 ----
  	datum key, val;
  	PyObject *defvalue = Py_None;
+ 	int tmp_size;
  
  	if (!PyArg_ParseTuple(args, "s#|O:get",
!                               &key.dptr, &tmp_size, &defvalue))
  		return NULL;
+ 	key.dsize = tmp_size;
          check_dbmobject_open(dp);
  	val = dbm_fetch(dp->di_dbm, key);
***************
*** 237,244 ****
  	datum key, val;
  	PyObject *defvalue = NULL;
  
  	if (!PyArg_ParseTuple(args, "s#|S:setdefault",
!                               &key.dptr, &key.dsize, &defvalue))
  		return NULL;
          check_dbmobject_open(dp);
  	val = dbm_fetch(dp->di_dbm, key);
--- 246,255 ----
  	datum key, val;
  	PyObject *defvalue = NULL;
+ 	int tmp_size;
  
  	if (!PyArg_ParseTuple(args, "s#|S:setdefault",
!                               &key.dptr, &tmp_size, &defvalue))
  		return NULL;
+ 	key.dsize = tmp_size;
          check_dbmobject_open(dp);
  	val = dbm_fetch(dp->di_dbm, key);