merged with mxml in ROME.

* increased size of a string buffer. (ROME rev.1341)
 * performance improvement of parse_entity (ROME rev.1609)
This commit is contained in:
Ryu Sawada 2007-02-26 13:49:17 +00:00
parent c4fd52f513
commit dabfe6db7c

14
mxml.c
View File

@ -423,7 +423,7 @@ int mxml_end_element(MXML_WRITER *writer)
*/ */
int mxml_write_attribute(MXML_WRITER *writer, const char *name, const char *value) int mxml_write_attribute(MXML_WRITER *writer, const char *name, const char *value)
{ {
char name_enc[1000], val_enc[1000], line[2000]; char name_enc[4096], val_enc[4096], line[8192];
if (!writer->element_is_open) if (!writer->element_is_open)
return FALSE; return FALSE;
@ -1547,6 +1547,8 @@ int mxml_parse_entity(char **buf, const char *file_name, char *error, int error_
int ip; /* counter for entity value */ int ip; /* counter for entity value */
char directoryname[FILENAME_MAX]; char directoryname[FILENAME_MAX];
char filename[FILENAME_MAX]; char filename[FILENAME_MAX];
int entity_value_length[MXML_MAX_ENTITY];
int entity_name_length[MXML_MAX_ENTITY];
for (ip = 0; ip < MXML_MAX_ENTITY; ip++) for (ip = 0; ip < MXML_MAX_ENTITY; ip++)
entity_value[ip] = NULL; entity_value[ip] = NULL;
@ -1918,10 +1920,12 @@ int mxml_parse_entity(char **buf, const char *file_name, char *error, int error_
length = strlen(buffer); length = strlen(buffer);
for (i = 0; i < nentity; i++) { for (i = 0; i < nentity; i++) {
p = buffer; p = buffer;
entity_value_length[i] = strlen(entity_value[i]);
entity_name_length[i] = strlen(entity_name[i]);
while (1) { while (1) {
pv = strstr(p, entity_name[i]); pv = strstr(p, entity_name[i]);
if (pv) { if (pv) {
length += strlen(entity_value[i]) - strlen(entity_name[i]); length += entity_value_length[i] - entity_name_length[i];
p = pv + 1; p = pv + 1;
} else { } else {
break; break;
@ -1947,10 +1951,10 @@ int mxml_parse_entity(char **buf, const char *file_name, char *error, int error_
if (*p == '&') { if (*p == '&') {
/* found entity */ /* found entity */
for (j = 0; j < nentity; j++) { for (j = 0; j < nentity; j++) {
if (strncmp(p, entity_name[j], strlen(entity_name[j])) == 0) { if (strncmp(p, entity_name[j], entity_name_length[j]) == 0) {
for (k = 0; k < (int) strlen(entity_value[j]); k++) for (k = 0; k < (int) entity_value_length[j]; k++)
*pv++ = entity_value[j][k]; *pv++ = entity_value[j][k];
p += strlen(entity_name[j]); p += entity_name_length[j];
break; break;
} }
} }