src/tracker-extract/tracker-extract-gif.c | 36 +++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) --- a/src/tracker-extract/tracker-extract-gif.c +++ a/src/tracker-extract/tracker-extract-gif.c @@ -75,6 +75,39 @@ return (GIF_OK); } +#if GIFLIB_MAJOR >= 5 +static inline void +gif_error (const gchar *action, int err) +{ + const char *str = GifErrorString (err); + if (str != NULL) { + g_message ("%s, error: '%s'", action, str); + } else { + g_message ("%s, undefined error %d", action, err); + } +} +#else /* GIFLIB_MAJOR >= 5 */ +static inline void print_gif_error() +{ +#if defined(GIFLIB_MAJOR) && defined(GIFLIB_MINOR) && ((GIFLIB_MAJOR == 4 && GIFLIB_MINOR >= 2) || GIFLIB_MAJOR > 4) + const char *str = GifErrorString (); + if (str != NULL) { + g_message ("GIF, error: '%s'", str); + } else { + g_message ("GIF, undefined error"); + } +#else + PrintGifError(); +#endif +} +#endif /* GIFLIB_MAJOR >= 5 */ + +/* giflib 5.1 changed the API of DGifCloseFile to take two arguments */ +#if !defined(GIFLIB_MAJOR) || \ + !(GIFLIB_MAJOR > 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1)) +#define DGifCloseFile(a, b) DGifCloseFile(a) +#endif + static void read_metadata (TrackerSparqlBuilder *preupdate, TrackerSparqlBuilder *metadata, @@ -100,14 +133,22 @@ ExtBlock extBlock; if (DGifGetRecordType(gifFile, &RecordType) == GIF_ERROR) { - PrintGifError(); +#if GIFLIB_MAJOR < 5 + print_gif_error (); +#else /* GIFLIB_MAJOR < 5 */ + gif_error ("Could not read next GIF record type", gifFile->Error); +#endif /* GIFLIB_MAJOR < 5 */ return; } switch (RecordType) { case IMAGE_DESC_RECORD_TYPE: if (DGifGetImageDesc(gifFile) == GIF_ERROR) { - PrintGifError(); +#if GIFLIB_MAJOR < 5 + print_gif_error(); +#else /* GIFLIB_MAJOR < 5 */ + gif_error ("Could not get GIF record information", gifFile->Error); +#endif /* GIFLIB_MAJOR < 5 */ return; } @@ -117,7 +158,11 @@ framedata = g_malloc (framewidth*frameheight); if (DGifGetLine(gifFile, framedata, framewidth*frameheight)==GIF_ERROR) { - PrintGifError(); +#if GIFLIB_MAJOR < 5 + print_gif_error(); +#else /* GIFLIB_MAJOR < 5 */ + gif_error ("Could not load a block of GIF pixes", gifFile->Error); +#endif /* GIFLIB_MAJOR < 5 */ return; } @@ -593,6 +638,9 @@ gchar *filename, *uri; GFile *file; int fd; +#if GIFLIB_MAJOR >= 5 + int err; +#endif preupdate = tracker_extract_info_get_preupdate_builder (info); metadata = tracker_extract_info_get_metadata_builder (info); @@ -617,8 +665,14 @@ return FALSE; } +#if GIFLIB_MAJOR < 5 if ((gifFile = DGifOpenFileHandle (fd)) == NULL) { - PrintGifError (); + print_gif_error (); +#else /* GIFLIB_MAJOR < 5 */ + if ((gifFile = DGifOpenFileHandle (fd, &err)) == NULL) { + gif_error ("Could not open GIF file with handle", err); +#endif /* GIFLIB_MAJOR < 5 */ + g_free (filename); close (fd); return FALSE; } @@ -637,10 +691,15 @@ g_string_free (where, TRUE); g_free (uri); - +#if GIFLIB_MAJOR < 5 if (DGifCloseFile (gifFile) != GIF_OK) { - PrintGifError (); + print_gif_error (); + } +#else /* GIFLIB_MAJOR < 5 */ + if (DGifCloseFile (gifFile, NULL) != GIF_OK) { + gif_error ("Could not close GIF file", gifFile->Error); } +#endif /* GIFLIB_MAJOR < 5 */ return TRUE; }