[Python-checkins] python/dist/src/Modules _tkinter.c,1.155,1.156

loewis@users.sourceforge.net loewis@users.sourceforge.net
Wed, 30 Apr 2003 22:47:03 -0700


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

Modified Files:
	_tkinter.c 
Log Message:
Convert tcl objects to strings in getvar/setvar. Fixes #730506.


Index: _tkinter.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/_tkinter.c,v
retrieving revision 1.155
retrieving revision 1.156
diff -C2 -d -r1.155 -r1.156
*** _tkinter.c	16 Apr 2003 20:34:55 -0000	1.155
--- _tkinter.c	1 May 2003 05:47:00 -0000	1.156
***************
*** 743,746 ****
--- 743,752 ----
  }
  
+ static char*
+ PyTclObject_TclString(PyObject *self)
+ {
+ 	return Tcl_GetString(((PyTclObject*)self)->value);
+ }
+ 
  /* Like _str, but create Unicode if necessary. */
  PyDoc_STRVAR(PyTclObject_string__doc__, 
***************
*** 1467,1470 ****
--- 1473,1492 ----
  } VarEvent;
  
+ static int
+ varname_converter(PyObject *in, void *_out)
+ {
+ 	char **out = (char**)_out;
+ 	if (PyString_Check(in)) {
+ 		*out = PyString_AsString(in);
+ 		return 1;
+ 	}
+ 	if (PyTclObject_Check(in)) {
+ 		*out = PyTclObject_TclString(in);
+ 		return 1;
+ 	}
+ 	/* XXX: Should give diagnostics. */
+ 	return 0;
+ }	
+ 
  void
  var_perform(VarEvent *ev)
***************
*** 1543,1547 ****
  	Tcl_Obj *newval, *ok;
  
! 	if (PyArg_ParseTuple(args, "sO:setvar", &name1, &newValue)) {
  		/* XXX Acquire tcl lock??? */
  		newval = AsObj(newValue);
--- 1565,1570 ----
  	Tcl_Obj *newval, *ok;
  
! 	if (PyArg_ParseTuple(args, "O&O:setvar", 
! 			     varname_converter, &name1, &newValue)) {
  		/* XXX Acquire tcl lock??? */
  		newval = AsObj(newValue);
***************
*** 1605,1609 ****
  	Tcl_Obj *tres;
  
! 	if (!PyArg_ParseTuple(args, "s|s:getvar", &name1, &name2))
  		return NULL;
  
--- 1628,1633 ----
  	Tcl_Obj *tres;
  
! 	if (!PyArg_ParseTuple(args, "O&|s:getvar", 
! 			      varname_converter, &name1, &name2))
  		return NULL;