diff --git a/gio/inotify/ginotifyfilemonitor.c b/gio/inotify/ginotifyfilemonitor.c index 9bd19d0c1..4c95e87fb 100644 --- a/gio/inotify/ginotifyfilemonitor.c +++ b/gio/inotify/ginotifyfilemonitor.c @@ -61,7 +61,7 @@ g_inotify_file_monitor_start (GLocalFileMonitor *local_monitor, success = _ih_startup (); g_assert (success); - inotify_monitor->sub = _ih_sub_new (dirname, basename, filename != NULL, source); + inotify_monitor->sub = _ih_sub_new (dirname, basename, filename, source); _ih_sub_add (inotify_monitor->sub); } diff --git a/gio/inotify/inotify-sub.c b/gio/inotify/inotify-sub.c index feb63fae2..b161557db 100644 --- a/gio/inotify/inotify-sub.c +++ b/gio/inotify/inotify-sub.c @@ -44,16 +44,27 @@ dup_dirname (const gchar *dirname) inotify_sub* _ih_sub_new (const gchar *dirname, + const gchar *basename, const gchar *filename, - gboolean watch_hardlinks, gpointer user_data) { inotify_sub *sub = NULL; sub = g_new0 (inotify_sub, 1); - sub->dirname = dup_dirname (dirname); - sub->filename = g_strdup (filename); - sub->hardlinks = watch_hardlinks; + + if (filename) + { + sub->dirname = g_path_get_dirname (filename); + sub->filename = g_path_get_basename (filename); + sub->hardlinks = TRUE; + } + else + { + sub->dirname = dup_dirname (dirname); + sub->filename = g_strdup (basename); + sub->hardlinks = FALSE; + } + sub->user_data = user_data; IS_W ("new subscription for %s being setup\n", sub->dirname); diff --git a/gio/inotify/inotify-sub.h b/gio/inotify/inotify-sub.h index b0844fd99..fcde4f4cd 100644 --- a/gio/inotify/inotify-sub.h +++ b/gio/inotify/inotify-sub.h @@ -33,8 +33,8 @@ typedef struct } inotify_sub; inotify_sub *_ih_sub_new (const gchar *dirname, + const gchar *basename, const gchar *filename, - gboolean watch_hardlinks, gpointer user_data); void _ih_sub_free (inotify_sub *sub);