summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Van Hoof <philip@codeminded.be>2011-09-22 10:46:25 +0200
committerPhilip Van Hoof <philip@codeminded.be>2011-09-23 12:44:44 +0200
commit43e643c8495fdcfca41434bcfc1486d8eb523d20 (patch)
tree88209b7401a7cd0811e169a31c51252a3d66ef5e
parent23f30269b4f0e0e5ab7db83dd71daaedeb6c9f69 (diff)
downloadtracker-43e643c8495fdcfca41434bcfc1486d8eb523d20.tar.gz
tracker-extract, msoffice: Use O_NOATIME for opening msoffice files
Conflicts: src/tracker-extract/tracker-extract-msoffice.c
-rw-r--r--src/tracker-extract/tracker-extract-msoffice.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/src/tracker-extract/tracker-extract-msoffice.c b/src/tracker-extract/tracker-extract-msoffice.c
index aeee999ef..1637c7965 100644
--- a/src/tracker-extract/tracker-extract-msoffice.c
+++ b/src/tracker-extract/tracker-extract-msoffice.c
@@ -21,6 +21,7 @@
#include "config.h"
+#include <errno.h>
#include <string.h>
#include <glib.h>
@@ -35,6 +36,7 @@
#include <gsf/gsf-infile-zip.h>
#include <libtracker-common/tracker-utils.h>
+#include <libtracker-common/tracker-file-utils.h>
#include <libtracker-common/tracker-os-dependant.h>
#include <libtracker-extract/tracker-extract.h>
@@ -757,28 +759,20 @@ extract_powerpoint_content (GsfInfile *infile,
return all_texts ? g_string_free (all_texts, FALSE) : NULL;
}
-/**
- * @brief Open specified uri for reading and initialize gsf
- * @param uri URI of the file to open
- * @return GsfInFile of the opened file or NULL if failed to open file
- */
static GsfInfile *
-open_uri (const gchar *uri)
+open_file (const gchar *filename, FILE *file)
{
GsfInput *input;
GsfInfile *infile;
- gchar *filename;
-
- filename = g_filename_from_uri (uri, NULL, NULL);
- input = gsf_input_stdio_new (filename, NULL);
- g_free (filename);
+ input = gsf_input_stdio_new_FILE (filename, file, TRUE);
+
if (!input) {
return NULL;
}
infile = gsf_infile_msole_new (input, NULL);
- g_object_unref (G_OBJECT (input));
+ g_object_unref (input);
return infile;
}
@@ -1655,6 +1649,8 @@ extract_msoffice (const gchar *uri,
gchar *content = NULL;
gboolean is_encrypted = FALSE;
gsize max_bytes;
+ gchar *filename;
+ FILE *mfile;
file = g_file_new_for_uri (uri);
@@ -1679,10 +1675,24 @@ extract_msoffice (const gchar *uri,
gsf_init ();
- infile = open_uri (uri);
+ filename = g_filename_from_uri (uri, NULL, NULL);
+
+ mfile = tracker_file_open (filename);
+ g_free (filename);
+
+ if (!mfile) {
+ g_warning ("Can't open file from uri '%s': %s",
+ uri, g_strerror (errno));
+ return;
+ }
+
+ infile = open_file (uri, mfile);
if (!infile) {
g_object_unref (file_info);
gsf_shutdown ();
+ if (mfile) {
+ tracker_file_close (mfile, FALSE);
+ }
return;
}
@@ -1728,6 +1738,10 @@ extract_msoffice (const gchar *uri,
g_object_unref (infile);
g_object_unref (file_info);
gsf_shutdown ();
+
+ if (mfile) {
+ tracker_file_close (mfile, FALSE);
+ }
}
TrackerExtractData *