[Python-checkins] CVS: python/dist/src/Objects stringobject.c,2.79,2.80

Jeremy Hylton python-dev@python.org
Tue, 11 Jul 2000 13:55:40 -0700


Update of /cvsroot/python/python/dist/src/Objects
In directory slayer.i.sourceforge.net:/tmp/cvs-serv10345/Objects

Modified Files:
	stringobject.c 
Log Message:
small updates to string_join:
    use PyString_AS_STRING macro on local string object
    when resizing string, make sure resized string will always be big enough
    split string containing error message across two lines    
add test to string_tests that causes resizing


Index: stringobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/stringobject.c,v
retrieving revision 2.79
retrieving revision 2.80
diff -C2 -r2.79 -r2.80
*** stringobject.c	2000/07/11 04:58:12	2.79
--- stringobject.c	2000/07/11 20:55:38	2.80
***************
*** 744,748 ****
  	int seqlen = 0;
  	int sz = 100;
! 	int i, slen;
  	PyObject *orig, *seq, *item;
  
--- 744,748 ----
  	int seqlen = 0;
  	int sz = 100;
! 	int i, slen, sz_incr;
  	PyObject *orig, *seq, *item;
  
***************
*** 771,775 ****
  		goto finally;
  
! 	p = PyString_AsString(res);
  
  	for (i = 0; i < seqlen; i++) {
--- 771,775 ----
  		goto finally;
  
! 	p = PyString_AS_STRING(res);
  
  	for (i = 0; i < seqlen; i++) {
***************
*** 782,786 ****
  			}
  			PyErr_Format(PyExc_TypeError,
! 			     "sequence item %i: expected string, %.80s found",
  				     i, item->ob_type->tp_name);
  			goto finally;
--- 782,787 ----
  			}
  			PyErr_Format(PyExc_TypeError,
! 				     "sequence item %i: expected string,"
! 				     " %.80s found",
  				     i, item->ob_type->tp_name);
  			goto finally;
***************
*** 788,796 ****
  		slen = PyString_GET_SIZE(item);
  		while (reslen + slen + seplen >= sz) {
! 			if (_PyString_Resize(&res, sz*2)) {
  				goto finally;
  			}
! 			sz *= 2;
! 			p = PyString_AsString(res) + reslen;
  		}
  		if (i > 0) {
--- 789,799 ----
  		slen = PyString_GET_SIZE(item);
  		while (reslen + slen + seplen >= sz) {
! 			/* at least double the size of the string */
! 			sz_incr = slen + seplen > sz ? slen + seplen : sz;
! 			if (_PyString_Resize(&res, sz + sz_incr)) {
  				goto finally;
  			}
! 			sz += sz_incr;
! 			p = PyString_AS_STRING(res) + reslen;
  		}
  		if (i > 0) {