Two cleanups for escape_string: [...] (quixote/src/_c_htmltext.c)

Neil Schemenauer <nascheme-fVcApmY9cLvQ3/1i3zOLAti2O/[email protected]> Wed, 08 Jan 2003 15:38:19 -0500
Newsgroups gmane.comp.web.quixote.cvs
Message-ID <[email protected]>
Update of /home/cvs/quixote/src
In directory hewson:/tmp/cvs-serv20280/src

Modified Files:
	_c_htmltext.c 
Log Message:
Two cleanups for escape_string:

  * remove the need for an extra buffer by allocating a PyString
    mutating it.  Should be a little faster.

  * use post increment when copying escape characters.  It's a little
    clearer what's going on.



Index: _c_htmltext.c
===================================================================
RCS file: /home/cvs/quixote/src/_c_htmltext.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- _c_htmltext.c	8 Jan 2003 19:44:03 -0000	1.1
+++ _c_htmltext.c	8 Jan 2003 20:38:16 -0000	1.2
@@ -61,51 +61,45 @@
 		return (PyObject *)s;
 	}
 	new_size = size + extra_space;
-	new_ss = PyMem_MALLOC(new_size);
-	if (new_ss == NULL)
+	new_s = PyString_FromStringAndSize(NULL, new_size);
+	if (new_s == NULL)
 		return NULL;
+	new_ss = PyString_AsString(new_s);
 	for (i=0, j=0; i < size; i++) {
 		switch (ss[i]) {
 		case '&':
-			new_ss[j] = '&';
-			new_ss[j+1] = 'a';
-			new_ss[j+2] = 'm';
-			new_ss[j+3] = 'p';
-			new_ss[j+4] = ';';
-			j += 5;
+			new_ss[j++] = '&';
+			new_ss[j++] = 'a';
+			new_ss[j++] = 'm';
+			new_ss[j++] = 'p';
+			new_ss[j++] = ';';
 			break;
 		case '<':
-			new_ss[j] = '&';
-			new_ss[j+1] = 'l';
-			new_ss[j+2] = 't';
-			new_ss[j+3] = ';';
-			j += 4;
+			new_ss[j++] = '&';
+			new_ss[j++] = 'l';
+			new_ss[j++] = 't';
+			new_ss[j++] = ';';
 			break;
 		case '>':
-			new_ss[j] = '&';
-			new_ss[j+1] = 'g';
-			new_ss[j+2] = 't';
-			new_ss[j+3] = ';';
-			j += 4;
+			new_ss[j++] = '&';
+			new_ss[j++] = 'g';
+			new_ss[j++] = 't';
+			new_ss[j++] = ';';
 			break;
 		case '"':
-			new_ss[j] = '&';
-			new_ss[j+1] = 'q';
-			new_ss[j+2] = 'u';
-			new_ss[j+3] = 'o';
-			new_ss[j+4] = 't';
-			new_ss[j+5] = ';';
-			j += 6;
+			new_ss[j++] = '&';
+			new_ss[j++] = 'q';
+			new_ss[j++] = 'u';
+			new_ss[j++] = 'o';
+			new_ss[j++] = 't';
+			new_ss[j++] = ';';
 			break;
 		default:
-			new_ss[j] = ss[i];
-			j += 1;
+			new_ss[j++] = ss[i];
 			break;
 		}
 	}
 	assert (j == new_size);
-	new_s = PyString_FromStringAndSize(new_ss, new_size);
-	PyMem_FREE(new_ss);
 	return (PyObject *)new_s;
 }