commit 5a3c83b91c814db749d1a23c531a559ba5b04701
parent b97b0cead96edc843ddb0f9a9b8dd3ed03319271
Author: Andrej Kacian <ticho@claws-mail.org>
Date: Sun, 29 Oct 2017 19:14:26 +0100
Use GIO API instead of g_stat() in prefs_themes_file_stats() on Windows.
Diffstat:
1 file changed, 47 insertions(+), 13 deletions(-)
diff --git a/src/prefs_themes.c b/src/prefs_themes.c
@@ -174,24 +174,58 @@ static void prefs_themes_file_install (const gchar *filename, gpointer data);
static void prefs_themes_file_stats(const gchar *filename, gpointer data)
{
+#ifdef G_OS_WIN32
+ GFile *f;
+ GFileInfo *fi;
+ GError *error = NULL;
+#else
GStatBuf s;
+#endif
+ goffset size;
DirInfo *di = (DirInfo *)data;
gint len;
gint i;
- if (0 == g_stat(filename, &s) && 0 != S_ISREG(s.st_mode)) {
- di->bytes += s.st_size;
- di->files++;
- len = strlen(filename);
- for (i = 0; (di->supported)[i] != NULL; ++i) {
- gint curlen = (di->length)[i];
- if (len <= curlen)
- continue;
- const gchar *extension = filename + (len - curlen);
- if (!strcmp(extension, (di->supported)[i])) {
- di->pixms++;
- break;
- }
+#ifdef G_OS_WIN32
+ f = g_file_new_for_path(filename);
+ fi = g_file_query_info(f, "standard::size,standard::type",
+ G_FILE_QUERY_INFO_NONE, NULL, &error);
+ if (error != NULL) {
+ g_warning(error->message);
+ g_error_free(error);
+ g_object_unref(f);
+ return;
+ }
+ if (g_file_info_get_file_type(fi) != G_FILE_TYPE_REGULAR) {
+ g_object_unref(fi);
+ g_object_unref(f);
+ return;
+ }
+ size = g_file_info_get_size(fi);
+ g_object_unref(fi);
+ g_object_unref(f);
+#else
+ if ((i = g_stat(filename, &s)) != 0) {
+ debug_print("g_stat on '%s' failed: %d\n", filename, i);
+ return;
+ }
+ if (!S_ISREG(s.st_mode)) {
+ return;
+ }
+ size = s.st_size;
+#endif
+
+ di->bytes += size;
+ di->files++;
+ len = strlen(filename);
+ for (i = 0; (di->supported)[i] != NULL; ++i) {
+ gint curlen = (di->length)[i];
+ if (len <= curlen)
+ continue;
+ const gchar *extension = filename + (len - curlen);
+ if (!strcmp(extension, (di->supported)[i])) {
+ di->pixms++;
+ break;
}
}
}