talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

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:
Msrc/prefs_themes.c | 60+++++++++++++++++++++++++++++++++++++++++++++++-------------
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; } } }