From bd6f42a872445e15d45c3ec093c2189fffde4c67 Mon Sep 17 00:00:00 2001 From: Yevgen Muntyan <17531749+muntyan@users.noreply.github.com> Date: Tue, 11 Jul 2006 22:39:37 -0500 Subject: [PATCH] Free caches in xdg_mime_shutdown(); do not reload database every five seconds. https://bugs.freedesktop.org/show_bug.cgi?id=7495 https://bugs.freedesktop.org/show_bug.cgi?id=7496 --- moo.kdevelop | 8 +++--- moo/mooutils/xdgmime/xdgmime.c | 49 +++++++++++++++++++++++----------- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/moo.kdevelop b/moo.kdevelop index d374f4d1..a90947ca 100644 --- a/moo.kdevelop +++ b/moo.kdevelop @@ -291,16 +291,16 @@ - + A new empty GAP source file - + A new empty C++ file. - + A new empty header file for C/C++. - + A new empty C file. diff --git a/moo/mooutils/xdgmime/xdgmime.c b/moo/mooutils/xdgmime/xdgmime.c index 9445aa4b..d77a9f7a 100644 --- a/moo/mooutils/xdgmime/xdgmime.c +++ b/moo/mooutils/xdgmime/xdgmime.c @@ -281,7 +281,8 @@ xdg_run_command_on_dirs (XdgDirectoryFunc func, * FIXME: This doesn't protect against permission changes. */ static int -xdg_check_file (const char *file_path) +xdg_check_file (const char *file_path, + int *exists) { struct stat st; @@ -290,6 +291,9 @@ xdg_check_file (const char *file_path) { XdgDirTimeList *list; + if (exists) + *exists = TRUE; + for (list = dir_time_list; list; list = list->next) { if (! strcmp (list->directory_name, file_path) && @@ -303,9 +307,12 @@ xdg_check_file (const char *file_path) return (list->checked != XDG_CHECKED_VALID); } } + return TRUE; } + if (exists) + *exists = FALSE; return FALSE; } @@ -313,15 +320,28 @@ static int xdg_check_dir (const char *directory, int *invalid_dir_list) { - int invalid; + int invalid, exists; char *file_name; assert (directory != NULL); + /* Check the mime.cache file */ + file_name = malloc (strlen (directory) + strlen ("/mime/mime.cache") + 1); + strcpy (file_name, directory); strcat (file_name, "/mime/mime.cache"); + invalid = xdg_check_file (file_name, &exists); + free (file_name); + if (invalid) + { + *invalid_dir_list = TRUE; + return TRUE; + } + else if (exists) + return FALSE; + /* Check the globs file */ file_name = malloc (strlen (directory) + strlen ("/mime/globs") + 1); strcpy (file_name, directory); strcat (file_name, "/mime/globs"); - invalid = xdg_check_file (file_name); + invalid = xdg_check_file (file_name, NULL); free (file_name); if (invalid) { @@ -332,18 +352,7 @@ xdg_check_dir (const char *directory, /* Check the magic file */ file_name = malloc (strlen (directory) + strlen ("/mime/magic") + 1); strcpy (file_name, directory); strcat (file_name, "/mime/magic"); - invalid = xdg_check_file (file_name); - free (file_name); - if (invalid) - { - *invalid_dir_list = TRUE; - return TRUE; - } - - /* Check the mime.cache file */ - file_name = malloc (strlen (directory) + strlen ("/mime/mime.cache") + 1); - strcpy (file_name, directory); strcat (file_name, "/mime/mime.cache"); - invalid = xdg_check_file (file_name); + invalid = xdg_check_file (file_name, NULL); free (file_name); if (invalid) { @@ -584,6 +593,16 @@ xdg_mime_shutdown (void) parent_list = NULL; } + if (_xdg_mime_caches) + { + int i; + for (i = 0; i < n_caches; ++i) + _xdg_mime_cache_unref (_xdg_mime_caches[i]); + free (_xdg_mime_caches); + _xdg_mime_caches = NULL; + n_caches = 0; + } + for (list = callback_list; list; list = list->next) (list->callback) (list->data);