summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2008-07-01 02:32:12 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2008-07-01 02:32:12 +0000
commit8af6c328a96c3e06dc862863d6862504326196cf (patch)
tree5a51f3072a03ebb7d14dfd49f1cb3fe90918af13
parentfaf349a2f92d89daf273a77b27691b068417696b (diff)
downloadglib-8af6c328a96c3e06dc862863d6862504326196cf.tar.gz
Bug 530196 – _g_local_file_has_trash_dir() doesn't handle st_dev == 0
* glocalfile.c (_g_local_file_has_trash_dir): Handle the case that st_dev might be zero. svn path=/branches/glib-2-16/; revision=7117
-rw-r--r--gio/ChangeLog9
-rw-r--r--gio/glocalfile.c12
2 files changed, 15 insertions, 6 deletions
diff --git a/gio/ChangeLog b/gio/ChangeLog
index daee38e64..355ecbced 100644
--- a/gio/ChangeLog
+++ b/gio/ChangeLog
@@ -1,3 +1,12 @@
+2008-06-30 Matthias Clasen <mclasen@redhat.com>
+
+ Backported from trunk:
+
+ Bug 530196 – _g_local_file_has_trash_dir() doesn't handle st_dev == 0
+
+ * glocalfile.c (_g_local_file_has_trash_dir): Handle the case that
+ st_dev might be zero.
+
2008-06-29 Matthias Clasen <mclasen@redhat.com>
Bug 540423 – unrecoverable error after g_seekable_truncate(seekable,
diff --git a/gio/glocalfile.c b/gio/glocalfile.c
index a668127ae..782e90e87 100644
--- a/gio/glocalfile.c
+++ b/gio/glocalfile.c
@@ -1580,7 +1580,8 @@ escape_trash_name (char *name)
gboolean
_g_local_file_has_trash_dir (const char *dirname, dev_t dir_dev)
{
- static gsize home_dev = 0;
+ static gsize home_dev_set = 0;
+ static dev_t home_dev;
char *topdir, *globaldir, *trashdir, *tmpname;
uid_t uid;
char uid_str[32];
@@ -1588,18 +1589,17 @@ _g_local_file_has_trash_dir (const char *dirname, dev_t dir_dev)
gboolean res;
int statres;
- if (g_once_init_enter (&home_dev))
+ if (g_once_init_enter (&home_dev_set))
{
- gsize setup_value = 0;
struct stat home_stat;
g_stat (g_get_home_dir (), &home_stat);
- setup_value = home_stat.st_dev;
- g_once_init_leave (&home_dev, setup_value);
+ home_dev = home_stat.st_dev;
+ g_once_init_leave (&home_dev_set, 1);
}
/* Assume we can trash to the home */
- if (dir_dev == (dev_t)home_dev)
+ if (dir_dev == home_dev)
return TRUE;
topdir = find_mountpoint_for (dirname, dir_dev);