static void read_thumbnail_and_write (const char *in_filename, const char *out_filename, int thumb_size) { GsfInput *input; GsfInfile *infile; GError *error; input = gsf_input_mmap_new (in_filename, NULL); if (!input) { error = NULL; input = gsf_input_stdio_new (in_filename, &error); if (!input) show_error_and_exit (error); } input = gsf_input_uncompress (input); error = NULL; if (NULL != (infile = gsf_infile_msole_new (input, &error))) msole_thumbnail (infile, out_filename, thumb_size); else if (NULL != (infile = gsf_infile_zip_new (input, &error))) zip_thumbnail (infile, out_filename, thumb_size); else show_error_and_exit (error); g_object_unref (infile); g_object_unref (input); }
static gboolean apply_ui_from_file (GtkBuilder *gui, GsfInput *src, const char *uifile, GError **error) { gboolean res; GsfInput *orig_src; if (!src) return FALSE; orig_src = g_object_ref (src); src = gsf_input_uncompress (src); if (uifile && src == orig_src) { /* * This is sad, but see bugs 662503 and 662679. Since * ui files can contain relative filenames we must use * the _file interface to load such files. Do not * compress such files for the time being. */ res = gtk_builder_add_from_file (gui, uifile, error); } else { size_t size = gsf_input_size (src); gconstpointer data = gsf_input_read (src, size, NULL); res = gtk_builder_add_from_string (gui, data, size, error); } g_object_unref (src); g_object_unref (orig_src); return res; }
int main (int argc, char *argv[]) { GHashTable * human_readable_keys; int i; if (argc < 2) { fprintf (stderr, _("Usage: wvSummary doc1 [... docN]\n")); return 1; } wvInit(); human_readable_keys = g_hash_table_new (g_str_hash, g_str_equal); for (i = 0; i < nr_metadata_names; i++) g_hash_table_insert (human_readable_keys, metadata_names[i].metadata_key, _(metadata_names[i].human_readable_key)); for (i = 1 ; i < argc ; i++) { GsfInput *input; GsfInfile *msole; GError *err = NULL; input = gsf_input_stdio_new (argv[i], &err); if(!input) { fprintf (stderr, _("Problem with getting metadata from %s:%s\n"), argv[i], err ? err->message : ""); g_error_free (err); continue; } input = gsf_input_uncompress (input); msole = gsf_infile_msole_new (input, &err); if(!msole) { fprintf (stderr, _("Problem with getting metadata from %s:%s\n"), argv[i], err ? err->message : ""); g_error_free (err); continue; } fprintf (stdout, _("Metadata for %s:\n"), argv[i]); print_summary_stream (msole, argv[i], "\05SummaryInformation", human_readable_keys); print_summary_stream (msole, argv[i], "\05DocumentSummaryInformation", human_readable_keys); g_object_unref (G_OBJECT (msole)); g_object_unref (G_OBJECT (input)); } g_hash_table_destroy (human_readable_keys); wvShutdown(); return 0; }
HRESULT STDMETHODCALLTYPE OMGSFIStorage::StgOpenStorageEx( const TCHAR FAR* in_filename, OMFile::OMAccessMode in_accessMode, void **out_storage) { TRACE("OMGSFIStorage::StgOpenStorageEx"); PRECONDITION("Valid access mode", in_accessMode == OMFile::readOnlyMode); GsfStorage *storage = 0; *out_storage = 0; char storageName[FILENAME_MAX]; #ifndef OM_UNICODE_APIS strncpy (storageName, in_filename, sizeof(storageName) -1); storageName[sizeof(storageName) -1] = '\0'; #else convertWideStringToString (storageName, in_filename, FILENAME_MAX); #endif GError *err; int status = GSTG_OK; GsfInput *input = GSF_INPUT (gsf_input_stdio_new (storageName, &err)); if (input != NULL) { input = gsf_input_uncompress (input); storage = GSF_INFILE (gsf_infile_msole_new (input, &err)); g_object_unref (G_OBJECT (input)); } else status = GSTG_ERROR; if (status == GSTG_OK) { OMGSFIStorage *newStorage = new OMGSFIStorage (storage, GSF_READ, storageName); *out_storage = newStorage; } return makeStatus(status); }
static int test (int argc, char *argv[]) { GsfInput *input; GsfInfile *infile; GError *err = NULL; fprintf (stderr, "%s\n", argv [1]); input = gsf_input_stdio_new (argv[1], &err); if (input == NULL) { g_return_val_if_fail (err != NULL, 1); g_warning ("'%s' error: %s", argv[1], err->message); g_error_free (err); return 1; } input = gsf_input_uncompress (input); infile = gsf_infile_msole_new (input, &err); g_object_unref (G_OBJECT (input)); if (infile == NULL) { g_return_val_if_fail (err != NULL, 1); g_warning ("'%s' Not an OLE file: %s", argv[1], err->message); g_error_free (err); return 1; } if (argc > 2) { int i; GsfInput *child, *ptr = GSF_INPUT (infile); for (i = 2 ; i < argc && ptr != NULL; i++, ptr = child) { fprintf (stderr, "--> '%s'\n", argv [i]); if (GSF_IS_INFILE (ptr) && gsf_infile_num_children (GSF_INFILE (ptr)) >= 0) { child = gsf_infile_child_by_name (GSF_INFILE (ptr), argv [i]); if (child == NULL) { g_warning ("No child named '%s'", argv [i]); child = NULL; } } else { g_warning ("stream is not a directory '%s'", argv [i]); child = NULL; } g_object_unref (G_OBJECT (ptr)); } if (ptr != NULL) { /* See the comment on is_dir in test-cp-msole.c. */ if (GSF_IS_INFILE (ptr) && gsf_infile_num_children (GSF_INFILE (ptr)) >= 0) ls_R (ptr); /* unrefs infile */ else { gsf_input_dump (GSF_INPUT (ptr), dump_as_hex); g_object_unref (G_OBJECT (ptr)); } } } else ls_R (GSF_INPUT (infile)); /* unrefs infile */ return 0; }
static int test (unsigned argc, char *argv[]) { static char const * const stream_names[] = { "Workbook", "WORKBOOK", "workbook", "Book", "BOOK", "book" }; GsfInput *input, *stream, *pcache_dir; GsfInfile *infile; GError *err = NULL; unsigned i, j; for (i = 1 ; i < argc ; i++) { fprintf( stderr, "%s\n",argv[i]); input = gsf_input_mmap_new (argv[i], NULL); if (input == NULL) /* Only report error if stdio fails too */ input = gsf_input_stdio_new (argv[i], &err); if (input == NULL) { g_return_val_if_fail (err != NULL, 1); g_warning ("'%s' error: %s", argv[i], err->message); g_error_free (err); err = NULL; continue; } input = gsf_input_uncompress (input); infile = gsf_infile_msole_new (input, &err); if (infile == NULL) { g_return_val_if_fail (err != NULL, 1); g_warning ("'%s' Not an OLE file: %s", argv[i], err->message); g_error_free (err); err = NULL; #ifdef DUMP_CONTENT dump_biff_stream (input); #endif g_object_unref (G_OBJECT (input)); continue; } #if 0 stream = gsf_infile_child_by_name (infile, "\01CompObj"); if (stream != NULL) { gsf_off_t len = gsf_input_size (stream); guint8 const *data = gsf_input_read (stream, len, NULL); if (data != NULL) gsf_mem_dump (data, len); g_object_unref (G_OBJECT (stream)); } return 0; #endif stream = gsf_infile_child_by_name (infile, "\05SummaryInformation"); if (stream != NULL) { GsfDocMetaData *meta_data = gsf_doc_meta_data_new (); puts ( "SummaryInfo"); err = gsf_doc_meta_data_read_from_msole (meta_data, stream); if (err != NULL) { g_warning ("'%s' error: %s", argv[i], err->message); g_error_free (err); err = NULL; } else gsf_doc_meta_dump (meta_data); g_object_unref (meta_data); g_object_unref (G_OBJECT (stream)); } stream = gsf_infile_child_by_name (infile, "\05DocumentSummaryInformation"); if (stream != NULL) { GsfDocMetaData *meta_data = gsf_doc_meta_data_new (); puts ( "DocSummaryInfo"); err = gsf_doc_meta_data_read_from_msole (meta_data, stream); if (err != NULL) { g_warning ("'%s' error: %s", argv[i], err->message); g_error_free (err); err = NULL; } else gsf_doc_meta_dump (meta_data); g_object_unref (meta_data); g_object_unref (G_OBJECT (stream)); } for (j = 0 ; j < G_N_ELEMENTS (stream_names) ; j++) { stream = gsf_infile_child_by_name (infile, stream_names[j]); if (stream != NULL) { puts (j < 3 ? "Excel97" : "Excel95"); #ifdef DUMP_CONTENT dump_biff_stream (stream); #endif g_object_unref (G_OBJECT (stream)); break; } } #ifdef DUMP_CONTENT pcache_dir = gsf_infile_child_by_name (infile, "_SX_DB_CUR"); /* Excel 97 */ if (NULL == pcache_dir) pcache_dir = gsf_infile_child_by_name (infile, "_SX_DB"); /* Excel 95 */ if (NULL != pcache_dir) { int i, n = gsf_infile_num_children (infile); for (i = 0 ; i < n ; i++) { stream = gsf_infile_child_by_index (GSF_INFILE (pcache_dir), i); if (stream != NULL) { printf ("=================================================\nPivot cache '%04hX'\n\n", i); dump_biff_stream (stream); g_object_unref (G_OBJECT (stream)); } } g_object_unref (G_OBJECT (pcache_dir)); } #endif g_object_unref (G_OBJECT (infile)); g_object_unref (G_OBJECT (input)); } return 0; }