summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Vollmer <mvollmer@redhat.com>2013-06-18 09:32:30 +0300
committerRay Strode <rstrode@redhat.com>2013-10-15 16:13:48 -0400
commit44cd5f817ab77e9e8b2d07fe601841ccaed2369c (patch)
tree23bc347ff3fa9ba17c67b70a516b6322d245c758
parent631c57790fe79ee70d79522eb1b3e461e2899d82 (diff)
downloadaccountsservice-44cd5f817ab77e9e8b2d07fe601841ccaed2369c.tar.gz
daemon: factor out file monitor setup.
This deduplicates a bit of code. https://bugs.freedesktop.org/show_bug.cgi?id=65846
-rw-r--r--src/daemon.c110
1 files changed, 46 insertions, 64 deletions
diff --git a/src/daemon.c b/src/daemon.c
index eb75ec9..b08bda6 100644
--- a/src/daemon.c
+++ b/src/daemon.c
@@ -642,83 +642,65 @@ on_gdm_monitor_changed (GFileMonitor *monitor,
queue_reload_autologin (daemon);
}
-static void
-daemon_init (Daemon *daemon)
+typedef void FileChangeCallback (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ Daemon *daemon);
+
+static GFileMonitor *
+setup_monitor (Daemon *daemon,
+ const gchar *path,
+ FileChangeCallback *callback)
{
+ GError *error = NULL;
GFile *file;
- GError *error;
-
- daemon->priv = DAEMON_GET_PRIVATE (daemon);
-
- daemon->priv->extension_ifaces = daemon_read_extension_ifaces ();
-
- daemon->priv->users = create_users_hash_table ();
-
- file = g_file_new_for_path (PATH_PASSWD);
- daemon->priv->passwd_monitor = g_file_monitor_file (file,
- G_FILE_MONITOR_NONE,
- NULL,
- &error);
- if (daemon->priv->passwd_monitor != NULL) {
- g_signal_connect (daemon->priv->passwd_monitor,
+ GFileMonitor *monitor;
+
+ file = g_file_new_for_path (path);
+ monitor = g_file_monitor_file (file,
+ G_FILE_MONITOR_NONE,
+ NULL,
+ &error);
+ if (monitor != NULL) {
+ g_signal_connect (monitor,
"changed",
- G_CALLBACK (on_users_monitor_changed),
+ G_CALLBACK (callback),
daemon);
} else {
- g_warning ("Unable to monitor %s: %s", PATH_PASSWD, error->message);
+ g_warning ("Unable to monitor %s: %s", path, error->message);
g_error_free (error);
}
g_object_unref (file);
- file = g_file_new_for_path (PATH_SHADOW);
- daemon->priv->shadow_monitor = g_file_monitor_file (file,
- G_FILE_MONITOR_NONE,
- NULL,
- &error);
- if (daemon->priv->shadow_monitor != NULL) {
- g_signal_connect (daemon->priv->shadow_monitor,
- "changed",
- G_CALLBACK (on_users_monitor_changed),
- daemon);
- } else {
- g_warning ("Unable to monitor %s: %s", PATH_SHADOW, error->message);
- g_error_free (error);
- }
- g_object_unref (file);
+ return monitor;
+}
+
+static void
+daemon_init (Daemon *daemon)
+{
+ daemon->priv = DAEMON_GET_PRIVATE (daemon);
+
+ daemon->priv->extension_ifaces = daemon_read_extension_ifaces ();
+
+ daemon->priv->users = create_users_hash_table ();
+
+ daemon->priv->passwd_monitor = setup_monitor (daemon,
+ PATH_PASSWD,
+ on_users_monitor_changed);
+ daemon->priv->shadow_monitor = setup_monitor (daemon,
+ PATH_SHADOW,
+ on_users_monitor_changed);
#ifdef HAVE_UTMPX_H
- file = g_file_new_for_path (PATH_WTMP);
- daemon->priv->wtmp_monitor = g_file_monitor_file (file,
- G_FILE_MONITOR_NONE,
- NULL,
- &error);
- if (daemon->priv->wtmp_monitor != NULL) {
- g_signal_connect (daemon->priv->wtmp_monitor,
- "changed",
- G_CALLBACK (on_users_monitor_changed),
- daemon);
- } else {
- g_warning ("Unable to monitor %s: %s", PATH_WTMP, error->message);
- g_error_free (error);
- }
- g_object_unref (file);
+ daemon->priv->wtmp_monitor = setup_monitor (daemon,
+ PATH_WTMP,
+ on_users_monitor_changed);
#endif
- file = g_file_new_for_path (PATH_GDM_CUSTOM);
- daemon->priv->gdm_monitor = g_file_monitor_file (file,
- G_FILE_MONITOR_NONE,
- NULL,
- &error);
- if (daemon->priv->gdm_monitor != NULL) {
- g_signal_connect (daemon->priv->gdm_monitor,
- "changed",
- G_CALLBACK (on_gdm_monitor_changed),
- daemon);
- } else {
- g_warning ("Unable to monitor %s: %s", PATH_GDM_CUSTOM, error->message);
- g_error_free (error);
- }
- g_object_unref (file);
+ daemon->priv->gdm_monitor = setup_monitor (daemon,
+ PATH_GDM_CUSTOM,
+ on_gdm_monitor_changed);
queue_reload_users (daemon);
queue_reload_autologin (daemon);