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;
}