diff options
author | Dave Beckett <dave@dajobe.org> | 2003-08-25 16:01:45 +0000 |
---|---|---|
committer | Dave Beckett <dave@dajobe.org> | 2003-08-25 16:01:45 +0000 |
commit | 043ebef129a06448a2074a95bac1d423aa730898 (patch) | |
tree | 9a46d267760f113c4046591d6b8d5c19c081697e | |
parent | 8acdd04b3e039a841a5a0f94f0d0a2683b7a6fbd (diff) | |
download | raptor-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.c | 59 |
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); } |