X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.0%2Fcinelerra%2Ffilexml.C;h=e5ce7b765d3f2625eb012dd5b4975c1b5aca4ce3;hb=63c49c5fdda77aadc2d0addc26a6884aadec8542;hp=6d591f246bc04a36c35d3186e9930e8fd4f49b4b;hpb=2d99bb8ce591f05a31464b517d85dc2bc35b2abe;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.0/cinelerra/filexml.C b/cinelerra-5.0/cinelerra/filexml.C index 6d591f24..e5ce7b76 100644 --- a/cinelerra-5.0/cinelerra/filexml.C +++ b/cinelerra-5.0/cinelerra/filexml.C @@ -36,6 +36,8 @@ #define eprintf printf static const char left_delm = '<', right_delm = '>'; +const char *FileXML::xml_header = "\n"; +const int FileXML::xml_header_size = strlen(xml_header); XMLBuffer::XMLBuffer(long buf_size, long max_size, int del) { @@ -395,7 +397,15 @@ int FileXML::append_tag() int FileXML::append_text(const char *text) { - append_text(text, strlen(text)); + if( text != 0 ) + append_text(text, strlen(text)); + return 0; +} + +int FileXML::append_data(const char *text) +{ + if( text != 0 ) + append_data(text, strlen(text)); return 0; } @@ -425,7 +435,12 @@ char* FileXML::get_data() } char* FileXML::string() { - return (char *)buffer->pos(); + return (char *)buffer->str(); +} + +long FileXML::length() +{ + return buffer->otell(); } char* FileXML::read_text() @@ -502,33 +517,24 @@ int FileXML::read_text_until(const char *tag_end, char *out, int len) int FileXML::write_to_file(const char *filename) { - strcpy(this->filename, filename); FILE *out = fopen(filename, "wb"); if( !out ) { eprintf("write_to_file %d \"%s\": %m\n", __LINE__, filename); return 1; } -// Position may have been rewound after storing - const char *str = string(); - long len = strlen(str); - fprintf(out, "\n"); - if( len && !fwrite(str, len, 1, out) ) { - eprintf("write_to_file %d \"%s\": %m\n", __LINE__, filename); - fclose(out); - return 1; - } + int ret = write_to_file(out, filename); fclose(out); - return 0; + return ret; } -int FileXML::write_to_file(FILE *file) +int FileXML::write_to_file(FILE *file, const char *filename) { - strcpy(filename, ""); - fprintf(file, "\n"); + strcpy(this->filename, filename); const char *str = string(); long len = strlen(str); // Position may have been rewound after storing - if( len && !fwrite(str, len, 1, file) ) { + if( !fwrite(xml_header, xml_header_size, 1, file) || + ( len > 0 && !fwrite(str, len, 1, file) ) ) { eprintf("\"%s\": %m\n", filename); return 1; }