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

Jeremy Hylton python-dev@python.org
2000年7月11日 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) {

AltStyle によって変換されたページ (->オリジナル) /