Hi all,
I'm trying to modify the SummaryInformation stream of an existing OLE file with libgsf. The following code does it right, but deletes all other streams:
bool SetStreamGSF(string filepath, string streamName, string & contents)
{
bool success = false;
GsfOutput *output = NULL, *stream = NULL;
GsfOutfile *outfile = NULL;
GError *err = NULL;
output = gsf_output_stdio_new (filepath.c_str(), &err);
if (output == NULL) {goto SetStreamGSF_end;};
outfile = gsf_outfile_msole_new (output);
if (outfile == NULL) {goto SetStreamGSF_end;};
stream = gsf_outfile_new_child (outfile, streamName.c_str(), false);
if (stream == NULL) {goto SetStreamGSF_end;};
if(!gsf_output_write (stream, contents.size(), (guint8 *) contents.data())) {goto SetStreamGSF_end;};
success = true;
SetStreamGSF_end:
if(stream) {gsf_output_close(stream); g_object_unref (G_OBJECT (stream)); }
if(outfile) {gsf_output_close (GSF_OUTPUT(outfile)); g_object_unref (G_OBJECT (outfile));}
if(output) {g_object_unref (G_OBJECT (output));}
return success;
}
I checked all sample tests in libgsf, and looked for documentation, but I didn't find the proper way to replace a stream in an OLE file without deleting other streams. Does anyone know how to do it?
Regards.