[gimp] Bug 683152 - Preview thumbnails in file open dialog causes error in 2.8.2



commit bb755960620ad648a264a99b5edb67357c513e04
Author: Michael Natterer <mitch gimp org>
Date:   Fri Jun 28 22:44:19 2013 +0200

    Bug 683152 - Preview thumbnails in file open dialog causes error in 2.8.2
    
    Port gimp_thumb_file_test() to GIO which seems to get its stat()
    calls right on all platforms.

 libgimpthumb/gimpthumb-utils.c |   67 +++++++++++++++++++++++++++------------
 1 files changed, 46 insertions(+), 21 deletions(-)
---
diff --git a/libgimpthumb/gimpthumb-utils.c b/libgimpthumb/gimpthumb-utils.c
index bad8337..0bbdd5b 100644
--- a/libgimpthumb/gimpthumb-utils.c
+++ b/libgimpthumb/gimpthumb-utils.c
@@ -28,15 +28,11 @@
 #include <string.h>
 #include <sys/types.h>
 
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
 #ifdef PLATFORM_OSX
 #include <AppKit/AppKit.h>
 #endif
 
-#include <glib-object.h>
+#include <gio/gio.h>
 #include <glib/gstdio.h>
 
 #ifdef G_OS_WIN32
@@ -515,33 +511,62 @@ gimp_thumb_file_test (const gchar *filename,
                       gint64      *size,
                       gint        *err_no)
 {
-  struct stat s;
+  GimpThumbFileType  type = GIMP_THUMB_FILE_TYPE_NONE;
+  GFile             *file;
+  GFileInfo         *info;
 
   g_return_val_if_fail (filename != NULL, FALSE);
 
-  if (g_stat (filename, &s) == 0)
+  file = g_file_new_for_path (filename);
+
+  info = g_file_query_info (file,
+                            G_FILE_ATTRIBUTE_STANDARD_TYPE ","
+                            G_FILE_ATTRIBUTE_STANDARD_SIZE ","
+                            G_FILE_ATTRIBUTE_TIME_MODIFIED,
+                            G_FILE_QUERY_INFO_NONE,
+                            NULL, NULL);
+
+  if (info)
     {
-      if (mtime)  *mtime  = s.st_mtime;
-      if (size)   *size   = s.st_size;
-      if (err_no) *err_no = 0;
+      if (mtime)
+        *mtime =
+          g_file_info_get_attribute_uint64 (info,
+                                            G_FILE_ATTRIBUTE_TIME_MODIFIED);
 
-      if (S_ISREG (s.st_mode))
-        {
-          return GIMP_THUMB_FILE_TYPE_REGULAR;
-        }
-      else if (S_ISDIR (s.st_mode))
+      if (size)
+        *size = g_file_info_get_size (info);
+
+      if (err_no)
+        *err_no = 0;
+
+      switch (g_file_info_get_attribute_uint32 (info,
+                                                G_FILE_ATTRIBUTE_STANDARD_TYPE))
         {
-          return GIMP_THUMB_FILE_TYPE_FOLDER;
+        case G_FILE_TYPE_REGULAR:
+          type = GIMP_THUMB_FILE_TYPE_REGULAR;
+          break;
+
+        case G_FILE_TYPE_DIRECTORY:
+          type = GIMP_THUMB_FILE_TYPE_FOLDER;
+          break;
+
+        default:
+          type = GIMP_THUMB_FILE_TYPE_SPECIAL;
+          break;
         }
 
-      return GIMP_THUMB_FILE_TYPE_SPECIAL;
+      g_object_unref (info);
+    }
+  else
+    {
+      if (mtime)  *mtime  = 0;
+      if (size)   *size   = 0;
+      if (err_no) *err_no = ENOENT;
     }
 
-  if (mtime)  *mtime  = 0;
-  if (size)   *size   = 0;
-  if (err_no) *err_no = errno;
+  g_object_unref (file);
 
-  return GIMP_THUMB_FILE_TYPE_NONE;
+  return type;
 }
 
 /**


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