[tracker-miners/wip/carlosg/better-extractor-errors: 3/5] tracker-extract: Fill in some more errors




commit 52fe417222700d8e1e35c3118a9e59f1d16c71c2
Author: Carlos Garnacho <carlosg gnome org>
Date:   Mon Nov 9 01:11:33 2020 +0100

    tracker-extract: Fill in some more errors
    
    Remove some of those warnings, and replace them with errors being
    propagated. This'll make those errors visible in "tracker3 status".

 src/tracker-extract/tracker-extract-abw.c       | 24 ++++++++++-------
 src/tracker-extract/tracker-extract-bmp.c       |  8 +++---
 src/tracker-extract/tracker-extract-desktop.c   | 35 ++++++++++++-------------
 src/tracker-extract/tracker-extract-gif.c       | 10 ++++---
 src/tracker-extract/tracker-extract-gstreamer.c |  5 ++++
 src/tracker-extract/tracker-extract-msoffice.c  |  7 +++--
 src/tracker-extract/tracker-extract-png.c       |  4 +++
 src/tracker-extract/tracker-extract-tiff.c      | 15 +++++++----
 8 files changed, 66 insertions(+), 42 deletions(-)
---
diff --git a/src/tracker-extract/tracker-extract-abw.c b/src/tracker-extract/tracker-extract-abw.c
index bbc612b5f..035c34e14 100644
--- a/src/tracker-extract/tracker-extract-abw.c
+++ b/src/tracker-extract/tracker-extract-abw.c
@@ -196,17 +196,21 @@ tracker_extract_get_metadata (TrackerExtractInfo  *info,
        fd = tracker_file_open_fd (filename);
 
        if (fd == -1) {
-               g_warning ("Could not open abw file '%s': %s\n",
-                          filename,
-                          g_strerror (errno));
+               g_set_error (error,
+                            G_IO_ERROR,
+                            g_io_error_from_errno (errno),
+                            "Could not open abw file: %s",
+                            g_strerror (errno));
                g_free (filename);
                return retval;
        }
 
        if (fstat (fd, &st) == -1) {
-               g_warning ("Could not fstat abw file '%s': %s\n",
-                          filename,
-                          g_strerror (errno));
+               g_set_error (error,
+                            G_IO_ERROR,
+                            g_io_error_from_errno (errno),
+                            "Could not fstat abw file: %s",
+                            g_strerror (errno));
                close (fd);
                g_free (filename);
                return retval;
@@ -218,9 +222,11 @@ tracker_extract_get_metadata (TrackerExtractInfo  *info,
        } else {
                contents = (gchar *) mmap (NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
                if (contents == MAP_FAILED) {
-                       g_warning ("Could not mmap abw file '%s': %s\n",
-                                  filename,
-                                  g_strerror (errno));
+                       g_set_error (error,
+                                    G_IO_ERROR,
+                                    g_io_error_from_errno (errno),
+                                    "Could not mmap abw file: %s",
+                                    g_strerror (errno));
                        close (fd);
                        g_free (filename);
                        return retval;
diff --git a/src/tracker-extract/tracker-extract-bmp.c b/src/tracker-extract/tracker-extract-bmp.c
index adfb8e393..97362d963 100644
--- a/src/tracker-extract/tracker-extract-bmp.c
+++ b/src/tracker-extract/tracker-extract-bmp.c
@@ -113,16 +113,16 @@ tracker_extract_get_metadata (TrackerExtractInfo  *info,
        gint64 width = 0, height = 0;
 
        file = tracker_extract_info_get_file (info);
-       if (!file) {
-               return FALSE;
-       }
-
        filename = g_file_get_path (file);
        size = tracker_file_get_size (filename);
        g_free (filename);
 
        if (size < 14) {
                /* Smaller than BMP header, can't be a real BMP file */
+               g_set_error (error,
+                            G_IO_ERROR,
+                            G_IO_ERROR_INVALID_DATA,
+                            "File too small to be a BMP");
                return FALSE;
        }
 
diff --git a/src/tracker-extract/tracker-extract-desktop.c b/src/tracker-extract/tracker-extract-desktop.c
index 0c793d48e..c58924649 100644
--- a/src/tracker-extract/tracker-extract-desktop.c
+++ b/src/tracker-extract/tracker-extract-desktop.c
@@ -101,10 +101,11 @@ insert_data_from_desktop_file (TrackerResource *resource,
 
 static gboolean
 process_desktop_file (TrackerResource  *resource,
-                      GFile            *file)
+                      GFile            *file,
+                      GError          **error)
 {
        GKeyFile *key_file;
-       GError *error = NULL;
+       GError *inner_error = NULL;
        gchar *name = NULL;
        gchar *type;
        GStrv cats;
@@ -112,16 +113,12 @@ process_desktop_file (TrackerResource  *resource,
        gboolean is_software = FALSE;
        gchar *lang;
 
-       key_file = get_desktop_key_file (file, &type, &error);
-       if (!key_file) {
+       key_file = get_desktop_key_file (file, &type, &inner_error);
+       if (inner_error) {
                gchar *uri;
 
                uri = g_file_get_uri (file);
-               g_warning ("Could not load desktop file '%s': %s",
-                          uri,
-                          error->message ? error->message : "no error given");
-
-               g_error_free (error);
+               g_propagate_prefixed_error (error, inner_error, "Could not load desktop file:");
                g_free (uri);
                return FALSE;
        }
@@ -130,7 +127,7 @@ process_desktop_file (TrackerResource  *resource,
                g_debug ("Desktop file is hidden");
                g_key_file_free (key_file);
                g_free (type);
-               return FALSE;
+               return TRUE;
        }
 
        /* Retrieve LANG locale setup */
@@ -181,12 +178,10 @@ process_desktop_file (TrackerResource  *resource,
                        g_free (link_url);
                } else {
                        /* a Link desktop entry must have an URL */
-                       gchar *uri;
-
-                       uri = g_file_get_uri (file);
-                       g_warning ("Link desktop entry '%s' does not have an url", uri);
-
-                       g_free (uri);
+                       g_set_error (error,
+                                    G_IO_ERROR,
+                                    G_IO_ERROR_INVALID_ARGUMENT,
+                                    "Link desktop entry does not have an url");
                        g_free (type);
                        g_key_file_free (key_file);
                        g_strfreev (cats);
@@ -196,7 +191,11 @@ process_desktop_file (TrackerResource  *resource,
                }
        } else {
                /* Invalid type, all valid types are already listed above */
-               g_warning ("Unknown desktop entry type '%s'", type);
+               g_set_error (error,
+                            G_IO_ERROR,
+                            G_IO_ERROR_INVALID_ARGUMENT,
+                            "Unknown desktop entry type '%s'",
+                            type);
                g_free (type);
                g_key_file_free (key_file);
                g_strfreev (cats);
@@ -301,7 +300,7 @@ tracker_extract_get_metadata (TrackerExtractInfo  *info,
 
        metadata = tracker_resource_new (NULL);
 
-       if (!process_desktop_file (metadata, tracker_extract_info_get_file (info))) {
+       if (!process_desktop_file (metadata, tracker_extract_info_get_file (info), error)) {
                g_object_unref (metadata);
                return FALSE;
        }
diff --git a/src/tracker-extract/tracker-extract-gif.c b/src/tracker-extract/tracker-extract-gif.c
index be5fd3353..579693881 100644
--- a/src/tracker-extract/tracker-extract-gif.c
+++ b/src/tracker-extract/tracker-extract-gif.c
@@ -496,12 +496,14 @@ tracker_extract_get_metadata (TrackerExtractInfo  *info,
        fd = tracker_file_open_fd (filename);
 
        if (fd == -1) {
-               g_warning ("Could not open GIF file '%s': %s\n",
-                          filename,
-                          g_strerror (errno));
+               g_set_error (error,
+                            G_IO_ERROR,
+                            g_io_error_from_errno (errno),
+                            "Could not open GIF file: %s\n",
+                            g_strerror (errno));
                g_free (filename);
                return FALSE;
-       }       
+       }
 
 #if GIFLIB_MAJOR < 5
        if ((gifFile = DGifOpenFileHandle (fd)) == NULL) {
diff --git a/src/tracker-extract/tracker-extract-gstreamer.c b/src/tracker-extract/tracker-extract-gstreamer.c
index f9b41b7cd..4a098ee78 100644
--- a/src/tracker-extract/tracker-extract-gstreamer.c
+++ b/src/tracker-extract/tracker-extract-gstreamer.c
@@ -1386,6 +1386,11 @@ tracker_extract_get_metadata (TrackerExtractInfo  *info,
        } else if (g_str_has_prefix (mimetype, "image/")) {
                main_resource = tracker_extract_gstreamer (uri, info, EXTRACT_MIME_IMAGE);
        } else {
+               g_set_error (error,
+                            G_IO_ERROR,
+                            G_IO_ERROR_INVALID_ARGUMENT,
+                            "Mimetype '%s is not supported",
+                            mimetype);
                g_free (uri);
                return FALSE;
        }
diff --git a/src/tracker-extract/tracker-extract-msoffice.c b/src/tracker-extract/tracker-extract-msoffice.c
index 96ccc1c82..06220671b 100644
--- a/src/tracker-extract/tracker-extract-msoffice.c
+++ b/src/tracker-extract/tracker-extract-msoffice.c
@@ -1642,8 +1642,11 @@ tracker_extract_get_metadata (TrackerExtractInfo  *info,
        g_free (filename);
 
        if (!mfile) {
-               g_warning ("Can't open file from uri '%s': %s",
-                          uri, g_strerror (errno));
+               g_set_error (error,
+                            G_IO_ERROR,
+                            g_io_error_from_errno (errno),
+                            "Can't open file: %s",
+                            g_strerror (errno));
                g_free (uri);
                return FALSE;
        }
diff --git a/src/tracker-extract/tracker-extract-png.c b/src/tracker-extract/tracker-extract-png.c
index fa22cfc84..c793b968e 100644
--- a/src/tracker-extract/tracker-extract-png.c
+++ b/src/tracker-extract/tracker-extract-png.c
@@ -661,6 +661,10 @@ tracker_extract_get_metadata (TrackerExtractInfo  *info,
        size = tracker_file_get_size (filename);
 
        if (size < 64) {
+               g_set_error (error,
+                            G_IO_ERROR,
+                            G_IO_ERROR_INVALID_DATA,
+                            "File too small to be a PNG");
                return FALSE;
        }
 
diff --git a/src/tracker-extract/tracker-extract-tiff.c b/src/tracker-extract/tracker-extract-tiff.c
index 6d48b05f9..779ca4379 100644
--- a/src/tracker-extract/tracker-extract-tiff.c
+++ b/src/tracker-extract/tracker-extract-tiff.c
@@ -285,15 +285,20 @@ tracker_extract_get_metadata (TrackerExtractInfo  *info,
        fd = tracker_file_open_fd (filename);
 
        if (fd == -1) {
-               g_warning ("Could not open tiff file '%s': %s\n",
-                          filename,
-                          g_strerror (errno));
+               g_set_error (error,
+                            G_IO_ERROR,
+                            g_io_error_from_errno (errno),
+                            "Could not open tiff file: %s",
+                            g_strerror (errno));
                g_free (filename);
                return FALSE;
-       }       
+       }
 
        if ((image = TIFFFdOpen (fd, filename, "r")) == NULL){
-               g_warning ("Could not open image:'%s'\n", filename);
+               g_set_error (error,
+                            G_IO_ERROR,
+                            G_IO_ERROR_INVALID_ARGUMENT,
+                            "Could not parse tiff file");
                g_free (filename);
                close (fd);
                return FALSE;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]