diff --git a/src/tracker-extract/tracker-extract-ps.c b/src/tracker-extract/tracker-extract-ps.c index 9d32116..2eae7c0 100644 --- a/src/tracker-extract/tracker-extract-ps.c +++ b/src/tracker-extract/tracker-extract-ps.c @@ -267,3 +267,63 @@ tracker_extract_ps (gchar *filename, GHashTable *metadata) close (fd); } } + +/* our private prototype */ +void tracker_child_cb (gpointer user_data); + +void +tracker_extract_ps_gz (gchar *filename, GHashTable *metadata) +{ + FILE * fz = NULL; + FILE * f = NULL; + GError * error = NULL; + gchar * gunzipped = NULL; + + gint fdz; + gint fd; + + fd = g_file_open_tmp ("tracker-extract-ps-gunzipped.XXXXXX", &gunzipped, &error); + if (error) { + g_error_free (error); + return; + } + + char * argv [4]; + argv [0] = "gunzip"; + argv [1] = "-c"; + argv [2] = filename; + argv [3] = NULL; + + gboolean stat = g_spawn_async_with_pipes ( + "/tmp", + argv, + NULL, /* envp */ + G_SPAWN_SEARCH_PATH | G_SPAWN_STDERR_TO_DEV_NULL, + tracker_child_cb, /* child setup func */ + GINT_TO_POINTER (10), /* user data for cb */ /* timeout */ + NULL, /* *pid */ + NULL, /* stdin */ + &fdz, /* stdout */ + NULL, /* stderr */ + &error); + + if (! stat) { + g_unlink (gunzipped); + return; + } + + if ((fz = fdopen (fdz, "r"))) { + if ((f = fdopen (fd, "w"))) { + unsigned char buf [8192]; + size_t b; + while ((b = fread (buf, 1, 8192, fz))) { + fwrite (buf, 1, b, f); + } + fclose (f); + } + fclose (fz); + } + + tracker_extract_ps (gunzipped, metadata); + g_unlink (gunzipped); +} diff --git a/src/tracker-extract/tracker-extract.c b/src/tracker-extract/tracker-extract.c index 413f76f..2849726 100644 --- a/src/tracker-extract/tracker-extract.c +++ b/src/tracker-extract/tracker-extract.c @@ -65,6 +65,7 @@ void tracker_extract_mplayer (gchar *, GHashTable *); void tracker_extract_totem (gchar *, GHashTable *); void tracker_extract_oasis (gchar *, GHashTable *); void tracker_extract_ps (gchar *, GHashTable *); +void tracker_extract_ps_gz (gchar *, GHashTable *); #ifdef HAVE_LIBXML2 void tracker_extract_html (gchar *, GHashTable *); #endif @@ -102,6 +103,7 @@ void tracker_extract_xine (gchar *, GHashTable *); MimeToExtractor extractors[] = { /* Document extractors */ { "application/vnd.oasis.opendocument.*", tracker_extract_oasis }, + { "application/x-gzpostscript", tracker_extract_ps_gz }, { "application/postscript", tracker_extract_ps }, #ifdef HAVE_LIBXML2 { "text/html", tracker_extract_html },