diff --git a/src/up-daemon.c b/src/up-daemon.c index 95f018f..c4acd91 100644 --- a/src/up-daemon.c +++ b/src/up-daemon.c @@ -69,6 +69,9 @@ struct UpDaemonPrivate guint low_time; guint critical_time; guint action_time; + + /* environment variable override */ + const char *state_dir_override; }; static void up_daemon_finalize (GObject *object); @@ -975,6 +978,23 @@ up_daemon_get_debug (UpDaemon *daemon) return daemon->priv->debug; } +/** + * up_deamon_get_state_dir_env_override: + * + * Get UPOWER_STATE_DIR environment variable. + **/ +const gchar * +up_deamon_get_state_dir_env_override (UpDaemon *daemon) +{ + return daemon->priv->state_dir_override; +} + +static void +up_daemon_get_env_override (UpDaemon *self) +{ + self->priv->state_dir_override = g_getenv ("UPOWER_STATE_DIR"); +} + /** * up_daemon_device_added_cb: **/ @@ -1112,6 +1132,8 @@ up_daemon_init (UpDaemon *daemon) load_time_policy (daemon, FALSE); policy_config_validate (daemon); + up_daemon_get_env_override (daemon); + daemon->priv->backend = up_backend_new (); g_signal_connect (daemon->priv->backend, "device-added", G_CALLBACK (up_daemon_device_added_cb), daemon); diff --git a/src/up-device-battery.c b/src/up-device-battery.c index 306e48a..5e7cb55 100644 --- a/src/up-device-battery.c +++ b/src/up-device-battery.c @@ -408,6 +408,26 @@ up_device_battery_set_charge_thresholds(UpDeviceBattery *self, gdouble start, gd return klass->set_battery_charge_thresholds(&self->parent_instance, start, end, error); } +static const gchar * +up_device_battery_get_state_dir (UpDeviceBattery *self) +{ + UpDevice *device = UP_DEVICE (self); + const gchar *state_dir_override = NULL; + UpDeviceBatteryPrivate *priv = up_device_battery_get_instance_private (self); + + if (priv->state_dir != NULL) + return priv->state_dir; + + state_dir_override = up_device_get_state_dir_override (device); + + if (state_dir_override != NULL) + priv->state_dir = state_dir_override; + else + priv->state_dir = STATE_DIR; + + return priv->state_dir; +} + static gboolean up_device_battery_get_battery_charge_threshold_config(UpDeviceBattery *self) { @@ -415,10 +435,11 @@ up_device_battery_get_battery_charge_threshold_config(UpDeviceBattery *self) g_autofree gchar *data = NULL; g_autoptr(GError) error = NULL; g_autofree gchar *state_filename = NULL; - UpDeviceBatteryPrivate *priv = up_device_battery_get_instance_private (self); + const char *state_dir = NULL; state_filename = g_strdup_printf("charging-threshold-status"); - filename = g_build_filename (priv->state_dir, state_filename, NULL); + state_dir = up_device_battery_get_state_dir (self); + filename = g_build_filename (state_dir, state_filename, NULL); if (g_file_get_contents (filename, &data, NULL, &error) == FALSE) { g_debug ("failed to read battery charge threshold: %s", error->message); return FALSE; @@ -594,10 +615,10 @@ static gboolean up_device_battery_charge_threshold_state_write(UpDeviceBattery *self, gboolean enabled, const gchar *state_file) { g_autofree gchar *filename = NULL; GError *error = NULL; + const gchar *state_dir; - UpDeviceBatteryPrivate *priv = up_device_battery_get_instance_private (self); - - filename = g_build_filename (priv->state_dir, state_file, NULL); + state_dir = up_device_battery_get_state_dir (self); + filename = g_build_filename (state_dir, state_file, NULL); if (!g_file_set_contents (filename, enabled ? "1": "0" , -1, &error)) { g_error ("failed to save battery charge threshold: %s", error->message); return FALSE; @@ -684,8 +705,6 @@ up_device_battery_set_charge_threshold (UpExportedDevice *skeleton, static void up_device_battery_init (UpDeviceBattery *self) { - UpDeviceBatteryPrivate *priv = up_device_battery_get_instance_private (self); - g_object_set (self, "type", UP_DEVICE_KIND_BATTERY, "power-supply", TRUE, @@ -694,12 +713,6 @@ up_device_battery_init (UpDeviceBattery *self) g_signal_connect (self, "handle-enable-charge-threshold", G_CALLBACK (up_device_battery_set_charge_threshold), self); - - if (g_getenv ("UPOWER_STATE_DIR")) { - priv->state_dir = g_getenv ("UPOWER_STATE_DIR"); - } else { - priv->state_dir = STATE_DIR; - } } static void diff --git a/src/up-device.c b/src/up-device.c index f332981..0dd8f23 100644 --- a/src/up-device.c +++ b/src/up-device.c @@ -751,6 +751,17 @@ up_device_get_native (UpDevice *device) return priv->native; } +const gchar * +up_device_get_state_dir_override (UpDevice *device) +{ + UpDevicePrivate *priv = up_device_get_instance_private (device); + + if (priv->daemon == NULL) + return NULL; + + return up_deamon_get_state_dir_env_override (priv->daemon); +} + static void up_device_init (UpDevice *device) { diff --git a/src/up-device.h b/src/up-device.h index b6d8ef0..5e6ad61 100644 --- a/src/up-device.h +++ b/src/up-device.h @@ -67,6 +67,7 @@ gboolean up_device_get_on_battery (UpDevice *device, gboolean *on_battery); gboolean up_device_get_online (UpDevice *device, gboolean *online); +const gchar *up_device_get_state_dir_override (UpDevice *device); gboolean up_device_polkit_is_allowed (UpDevice *device, GDBusMethodInvocation *invocation); void up_device_sibling_discovered (UpDevice *device,