summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Beckett <dave@dajobe.org>2003-08-25 16:01:45 +0000
committerDave Beckett <dave@dajobe.org>2003-08-25 16:01:45 +0000
commit043ebef129a06448a2074a95bac1d423aa730898 (patch)
tree9a46d267760f113c4046591d6b8d5c19c081697e
parent8acdd04b3e039a841a5a0f94f0d0a2683b7a6fbd (diff)
downloadraptor-043ebef129a06448a2074a95bac1d423aa730898.tar.gz
(raptor_new_xml_writer): Initialise writer buffer to an empty string
to start (i.e. just \0). (raptor_xml_writer_start_element): Now assume buffer is always present, remove empty buffer case. (raptor_xml_writer_end_element,raptor_xml_writer_cdata): Handle 0 length case, no strncpy.
-rw-r--r--src/raptor_xml_writer.c59
1 files changed, 25 insertions, 34 deletions
diff --git a/src/raptor_xml_writer.c b/src/raptor_xml_writer.c
index 8ad0fc71..426405e5 100644
--- a/src/raptor_xml_writer.c
+++ b/src/raptor_xml_writer.c
@@ -80,9 +80,13 @@ raptor_new_xml_writer(raptor_uri_handler *uri_handler,
{
raptor_xml_writer* xml_writer;
- xml_writer=(raptor_xml_writer*)RAPTOR_CALLOC(raptor_xml_writer, sizeof(raptor_xml_writer), 1);
+ xml_writer=(raptor_xml_writer*)RAPTOR_CALLOC(raptor_xml_writer, sizeof(raptor_xml_writer)+1, 1);
if(!xml_writer)
return NULL;
+
+ /* Initialise to the empty string */
+ xml_writer->content_cdata=(char*)RAPTOR_MALLOC(cstring, 1);
+ *xml_writer->content_cdata='\0';
xml_writer->content_cdata_namespaces_depth=0;
@@ -128,40 +132,25 @@ raptor_xml_writer_start_element(raptor_xml_writer* xml_writer,
xml_writer->error_data,
xml_writer->depth);
if(fmt_buffer && fmt_length) {
- /* Append cdata content content */
- if(xml_writer->content_cdata) {
- /* Append */
- char *new_cdata=(char*)RAPTOR_MALLOC(cstring, xml_writer->content_cdata_length + fmt_length + 1);
- if(new_cdata) {
+ /* Append to xml_writer->content_cdata */
+ char *new_cdata=(char*)RAPTOR_MALLOC(cstring, xml_writer->content_cdata_length + fmt_length + 1);
+ if(new_cdata) {
+ if(xml_writer->content_cdata_length) /* Can be zero, save a copy */
strncpy(new_cdata, xml_writer->content_cdata,
xml_writer->content_cdata_length);
- strcpy(new_cdata+xml_writer->content_cdata_length, fmt_buffer);
- RAPTOR_FREE(cstring, xml_writer->content_cdata);
- xml_writer->content_cdata=new_cdata;
- xml_writer->content_cdata_length+=fmt_length;
- }
- RAPTOR_FREE(cstring, fmt_buffer);
-
-#ifdef RAPTOR_DEBUG_CDATA
- RAPTOR_DEBUG3(raptor_xml_writer_start_element,
- "content cdata appended, now: '%s' (%d bytes)\n",
- xml_writer->content_cdata,
- xml_writer->content_cdata_length);
-#endif
-
- } else {
- /* Copy - is empty */
- xml_writer->content_cdata=fmt_buffer;
- xml_writer->content_cdata_length=fmt_length;
+ strcpy(new_cdata+xml_writer->content_cdata_length, fmt_buffer);
+ RAPTOR_FREE(cstring, xml_writer->content_cdata);
+ xml_writer->content_cdata=new_cdata;
+ xml_writer->content_cdata_length+=fmt_length;
+ }
+ RAPTOR_FREE(cstring, fmt_buffer);
#ifdef RAPTOR_DEBUG_CDATA
- RAPTOR_DEBUG3(raptor_xml_writer_start_element,
- "content cdata copied, now: '%s' (%d bytes)\n",
- xml_writer->content_cdata,
- xml_writer->content_cdata_length);
+ RAPTOR_DEBUG3(raptor_xml_writer_start_element,
+ "content cdata appended, now: '%s' (%d bytes)\n",
+ xml_writer->content_cdata,
+ xml_writer->content_cdata_length);
#endif
-
- }
}
xml_writer->depth++;
@@ -190,8 +179,9 @@ raptor_xml_writer_end_element(raptor_xml_writer* xml_writer,
/* Append cdata content content */
char *new_cdata=(char*)RAPTOR_MALLOC(cstring, xml_writer->content_cdata_length + fmt_length + 1);
if(new_cdata) {
- strncpy(new_cdata, xml_writer->content_cdata,
- xml_writer->content_cdata_length);
+ if(xml_writer->content_cdata_length) /* Can be zero, save a copy */
+ strncpy(new_cdata, xml_writer->content_cdata,
+ xml_writer->content_cdata_length);
strcpy(new_cdata+xml_writer->content_cdata_length, fmt_buffer);
RAPTOR_FREE(cstring, xml_writer->content_cdata);
xml_writer->content_cdata=new_cdata;
@@ -245,8 +235,9 @@ raptor_xml_writer_cdata(raptor_xml_writer* xml_writer,
if(!buffer)
return;
- if(xml_writer->content_cdata_length) {
- strncpy(buffer, xml_writer->content_cdata, xml_writer->content_cdata_length);
+ if(xml_writer->content_cdata) {
+ if(xml_writer->content_cdata_length) /* Can be zero, save a copy */
+ strncpy(buffer, xml_writer->content_cdata, xml_writer->content_cdata_length);
RAPTOR_FREE(cstring, xml_writer->content_cdata);
}