mirror of
https://gitea.psi.ch/ELOG/mxml.git
synced 2026-09-09 01:23:22 +00:00
Translate '<' and '&' always in writer
This commit is contained in:
parent
7bdb3bbfa1
commit
6f0e017341
33
mxml.c
33
mxml.c
@ -37,6 +37,9 @@
|
|||||||
deleting nodes.
|
deleting nodes.
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.3 2005/03/29 14:37:46 ritt
|
||||||
|
Translate '<' and '&' always in writer
|
||||||
|
|
||||||
Revision 1.2 2005/03/29 14:14:38 ritt
|
Revision 1.2 2005/03/29 14:14:38 ritt
|
||||||
Implemented mxml_set_translate
|
Implemented mxml_set_translate
|
||||||
|
|
||||||
@ -252,7 +255,7 @@ MXML_WRITER *mxml_open_file(const char *file_name)
|
|||||||
|
|
||||||
/*------------------------------------------------------------------*/
|
/*------------------------------------------------------------------*/
|
||||||
|
|
||||||
void mxml_encode(char *src, int size)
|
void mxml_encode(char *src, int size, int translate)
|
||||||
/* convert '<' '>' '&' '"' ''' into &xx; */
|
/* convert '<' '>' '&' '"' ''' into &xx; */
|
||||||
{
|
{
|
||||||
char *ps, *pd;
|
char *ps, *pd;
|
||||||
@ -272,6 +275,8 @@ void mxml_encode(char *src, int size)
|
|||||||
ps = src;
|
ps = src;
|
||||||
pd = buffer;
|
pd = buffer;
|
||||||
for (ps = src ; *ps && (size_t)pd - (size_t)buffer < (size_t)(size-10) ; ps++) {
|
for (ps = src ; *ps && (size_t)pd - (size_t)buffer < (size_t)(size-10) ; ps++) {
|
||||||
|
|
||||||
|
if (translate) { // tranlate "<", ">", "&", """, "'"
|
||||||
switch (*ps) {
|
switch (*ps) {
|
||||||
case '<':
|
case '<':
|
||||||
strcpy(pd, "<");
|
strcpy(pd, "<");
|
||||||
@ -296,6 +301,20 @@ void mxml_encode(char *src, int size)
|
|||||||
default:
|
default:
|
||||||
*pd++ = *ps;
|
*pd++ = *ps;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
switch (*ps) { // translate only illegal XML characters "<" and "&"
|
||||||
|
case '<':
|
||||||
|
strcpy(pd, "<");
|
||||||
|
pd += 4;
|
||||||
|
break;
|
||||||
|
case '&':
|
||||||
|
strcpy(pd, "&");
|
||||||
|
pd += 5;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
*pd++ = *ps;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
*pd = 0;
|
*pd = 0;
|
||||||
|
|
||||||
@ -368,8 +387,7 @@ int mxml_start_element(MXML_WRITER *writer, const char *name)
|
|||||||
strlcat(line, XML_INDENT, sizeof(line));
|
strlcat(line, XML_INDENT, sizeof(line));
|
||||||
strlcat(line, "<", sizeof(line));
|
strlcat(line, "<", sizeof(line));
|
||||||
strlcpy(name_enc, name, sizeof(name_enc));
|
strlcpy(name_enc, name, sizeof(name_enc));
|
||||||
if (writer->translate)
|
mxml_encode(name_enc, sizeof(name_enc), writer->translate);
|
||||||
mxml_encode(name_enc, sizeof(name_enc));
|
|
||||||
strlcat(line, name_enc, sizeof(line));
|
strlcat(line, name_enc, sizeof(line));
|
||||||
|
|
||||||
/* put element on stack */
|
/* put element on stack */
|
||||||
@ -438,11 +456,9 @@ int mxml_write_attribute(MXML_WRITER *writer, const char *name, const char *valu
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
strcpy(name_enc, name);
|
strcpy(name_enc, name);
|
||||||
if (writer->translate)
|
mxml_encode(name_enc, sizeof(name_enc), writer->translate);
|
||||||
mxml_encode(name_enc, sizeof(name_enc));
|
|
||||||
strcpy(val_enc, value);
|
strcpy(val_enc, value);
|
||||||
if (writer->translate)
|
mxml_encode(val_enc, sizeof(val_enc), writer->translate);
|
||||||
mxml_encode(val_enc, sizeof(val_enc));
|
|
||||||
|
|
||||||
sprintf(line, " %s=\"%s\"", name_enc, val_enc);
|
sprintf(line, " %s=\"%s\"", name_enc, val_enc);
|
||||||
|
|
||||||
@ -474,8 +490,7 @@ int mxml_write_value(MXML_WRITER *writer, const char *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
strcpy(data_enc, data);
|
strcpy(data_enc, data);
|
||||||
if (writer->translate)
|
mxml_encode(data_enc, data_size, writer->translate);
|
||||||
mxml_encode(data_enc, data_size);
|
|
||||||
return mxml_write_line(writer, data_enc) == (int)strlen(data_enc);
|
return mxml_write_line(writer, data_enc) == (int)strlen(data_enc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user