libgsf r982 - in trunk: . tools
- From: jody svn gnome org
- To: svn-commits-list gnome org
- Subject: libgsf r982 - in trunk: . tools
- Date: Sun, 4 May 2008 05:34:03 +0100 (BST)
Author: jody
Date: Sun May 4 04:34:02 2008
New Revision: 982
URL: http://svn.gnome.org/viewvc/libgsf?rev=982&view=rev
Log:
2008-05-04 Jody Goldberg <jody gnome org>
* tools/gsf-vba-dump.c (test) : support MS OOX.
Modified:
trunk/ChangeLog
trunk/NEWS
trunk/tools/gsf-vba-dump.c
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Sun May 4 04:34:02 2008
@@ -3,6 +3,9 @@
Dom:
* Revitalize gio support.
+Jody:
+ * Add MS OOX support to gsf-vba-dump.
+
Morten:
* Use g_base64_-routines from glib when available.
* Prepare for using gio to simulate gnome-vfs interface.
Modified: trunk/tools/gsf-vba-dump.c
==============================================================================
--- trunk/tools/gsf-vba-dump.c (original)
+++ trunk/tools/gsf-vba-dump.c Sun May 4 04:34:02 2008
@@ -1,8 +1,8 @@
/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
- * test-msvba.c:
+ * gsf-vba-dump.c:
*
- * Copyright (C) 2002-2003 Jody Goldberg (jody gnome org)
+ * Copyright (C) 2002-2008 Jody Goldberg (jody gnome org)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 2.1 of the GNU Lesser General Public
@@ -25,14 +25,28 @@
#include <gsf/gsf-infile.h>
#include <gsf/gsf-infile-msole.h>
#include <gsf/gsf-infile-msvba.h>
+#include <gsf/gsf-infile-zip.h>
+#include <gsf/gsf-open-pkg-utils.h>
#include <stdio.h>
+static void
+dump_vba (GsfInput *vba, char const *filename, GError **err)
+{
+ GsfInfile *vba_wrapper;
+
+ fprintf (stderr, "%s\n", filename);
+
+ vba_wrapper = gsf_infile_msvba_new (GSF_INFILE (vba), err);
+ if (vba_wrapper != NULL)
+ g_object_unref (G_OBJECT (vba_wrapper));
+}
+
static int
test (int argc, char *argv[])
{
- GsfInfile *vba_wrapper;
- GsfInput *input;
+ GsfInput *input, *vba;
+ GsfInfile *infile;
GError *err = NULL;
int i;
@@ -41,10 +55,7 @@
if (input == NULL) /* Only report error if stdio fails too */
input = gsf_input_stdio_new (argv[i], &err);
if (input != NULL) {
- GsfInfile *infile = gsf_infile_msole_new (input, &err);
- if (infile != NULL) {
- GsfInput *vba;
-
+ if (NULL != (infile = gsf_infile_msole_new (input, &err))) {
// Try XLS first
vba = gsf_infile_child_by_vname (infile, "_VBA_PROJECT_CUR", "VBA", NULL);
@@ -55,22 +66,38 @@
// TODO : PPT is more complex
if (vba != NULL) {
- fprintf( stderr, "%s\n",argv[i]);
-
- vba_wrapper = gsf_infile_msvba_new (GSF_INFILE (vba), &err);
- if (vba_wrapper != NULL) {
- g_object_unref (G_OBJECT (vba_wrapper));
- }
+ dump_vba (vba, argv[1], &err);
g_object_unref (G_OBJECT (vba));
- } else {
-#if 0
- g_warning ("'%s' : No VBA directory", argv[i]);
-#endif
- continue;
+ }
+ g_object_unref (G_OBJECT (infile));
+ } else if (NULL != (infile = gsf_infile_zip_new (input, NULL))) {
+ GsfInput *main_part = gsf_open_pkg_get_rel_by_type (GSF_INPUT (infile),
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument");
+ if (NULL != err) {
+ g_error_free (err);
+ err = NULL;
}
+ if (NULL != main_part) {
+ GsfInput *vba_stream = gsf_open_pkg_get_rel_by_type (main_part,
+ "http://schemas.microsoft.com/office/2006/relationships/vbaProject");
+ if (NULL != vba_stream) {
+ GsfInfile *ole = gsf_infile_msole_new (vba_stream, &err);
+ if (NULL != ole) {
+ vba = gsf_infile_child_by_vname (ole, "VBA", NULL);
+ if (NULL != vba) {
+ dump_vba (vba, argv[1], &err);
+ g_object_unref (G_OBJECT (vba));
+ }
+ g_object_unref (G_OBJECT (ole));
+ }
+ g_object_unref (G_OBJECT (vba_stream));
+ }
+ g_object_unref (G_OBJECT (main_part));
+ }
g_object_unref (G_OBJECT (infile));
}
+
g_object_unref (G_OBJECT (input));
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]