diff options
-rw-r--r-- | lib/sensors-applet-plugin.c | 181 | ||||
-rw-r--r-- | sensors-applet/sensors-applet-plugin.h | 10 | ||||
-rw-r--r-- | sensors-applet/sensors-applet-plugins.c | 215 | ||||
-rw-r--r-- | sensors-applet/sensors-applet-plugins.h | 4 |
4 files changed, 193 insertions, 217 deletions
diff --git a/lib/sensors-applet-plugin.c b/lib/sensors-applet-plugin.c index db0cfdd..96b47c6 100644 --- a/lib/sensors-applet-plugin.c +++ b/lib/sensors-applet-plugin.c @@ -32,68 +32,65 @@ extern const gchar *plugin_name; void sensors_applet_plugin_find_sensors(GList **sensors, const gchar *path, SensorsAppletPluginTestSensorFunc test_sensor) { - GDir *dir; - const gchar* new_file; - gchar *new_path; - - if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) { - /* also test can actually open file for - reading */ - if (access(path, R_OK) == 0) { - test_sensor(sensors, path); - } - - } - /* if is a directory (but not a symlinked dir as this - will lead us in circular loops) descend into it and look - for a sensor dir - */ - if (g_file_test(path, G_FILE_TEST_IS_DIR) && !g_file_test(path, G_FILE_TEST_IS_SYMLINK)) { - dir = g_dir_open(path, 0, NULL); - if (dir != NULL) { - while(NULL != (new_file = g_dir_read_name(dir))) { - new_path = g_build_filename(path, new_file, NULL); - sensors_applet_plugin_find_sensors(sensors, - new_path, - test_sensor); - g_free(new_path); - } - g_dir_close(dir); - } - } + GDir *dir; + const gchar* new_file; + gchar *new_path; + + if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) { + /* also test can actually open file for reading */ + if (access(path, R_OK) == 0) { + test_sensor(sensors, path); + } + } + + /* if is a directory (but not a symlinked dir as this + will lead us in circular loops) descend into it and look + for a sensor dir + */ + if (g_file_test(path, G_FILE_TEST_IS_DIR) && !g_file_test(path, G_FILE_TEST_IS_SYMLINK)) { + dir = g_dir_open(path, 0, NULL); + if (dir != NULL) { + while(NULL != (new_file = g_dir_read_name(dir))) { + new_path = g_build_filename(path, new_file, NULL); + sensors_applet_plugin_find_sensors(sensors, new_path, test_sensor); + g_free(new_path); + } + g_dir_close(dir); + } + } } /* for error handling */ GQuark sensors_applet_plugin_error_quark(void) { - static GQuark quark = 0; - gchar *string; - - if (quark == 0) { - string = g_strdup_printf("%s-plugin-error", plugin_name); - quark = g_quark_from_string(string); - g_free(string); - } - - return quark; + static GQuark quark = 0; + gchar *string; + + if (quark == 0) { + string = g_strdup_printf("%s-plugin-error", plugin_name); + quark = g_quark_from_string(string); + g_free(string); + } + + return quark; } -void sensors_applet_plugin_default_sensor_limits(SensorType type, - gdouble *low_value, - gdouble *high_value) -{ - switch (type) { - case TEMP_SENSOR: - *low_value = 20.0; - *high_value = 60.0; - break; - case FAN_SENSOR: - *low_value = 600.0; - *high_value = 3000.0; - break; - default: - *low_value = 0.0; - *high_value = 0.0; - } +void sensors_applet_plugin_default_sensor_limits(SensorType type, + gdouble *low_value, + gdouble *high_value) { + + switch (type) { + case TEMP_SENSOR: + *low_value = 20.0; + *high_value = 60.0; + break; + case FAN_SENSOR: + *low_value = 600.0; + *high_value = 3000.0; + break; + default: + *low_value = 0.0; + *high_value = 0.0; + } } void sensors_applet_plugin_add_sensor(GList **sensors, @@ -103,24 +100,22 @@ void sensors_applet_plugin_add_sensor(GList **sensors, SensorType type, gboolean enable, IconType icon, - const gchar *graph_color) -{ - gdouble low_value; - gdouble high_value; - sensors_applet_plugin_default_sensor_limits(type, - &low_value, - &high_value); - - sensors_applet_plugin_add_sensor_with_limits(sensors, - path, - id, - label, - type, - enable, - low_value, - high_value, - icon, - graph_color); + const gchar *graph_color) { + + gdouble low_value; + gdouble high_value; + sensors_applet_plugin_default_sensor_limits(type, &low_value, &high_value); + + sensors_applet_plugin_add_sensor_with_limits(sensors, + path, + id, + label, + type, + enable, + low_value, + high_value, + icon, + graph_color); } @@ -133,24 +128,24 @@ void sensors_applet_plugin_add_sensor_with_limits(GList **sensors, gdouble low_value, gdouble high_value, IconType icon, - const gchar *graph_color) -{ - SensorsAppletSensorInfo *info; - - info = g_malloc0(sizeof(*info)); - - info->path = g_strdup(path); - info->id = g_strdup(id); - info->label = g_strdup(label); - info->type = type; - info->enable = enable; - info->low_value = low_value; - info->high_value = high_value; - info->multiplier = 1.0; - info->offset = 0.0; - info->icon = icon; - info->graph_color = g_strdup(graph_color); - - *sensors = g_list_append(*sensors, info); + const gchar *graph_color) { + + SensorsAppletSensorInfo *info; + + info = g_malloc0(sizeof(*info)); + + info->path = g_strdup(path); + info->id = g_strdup(id); + info->label = g_strdup(label); + info->type = type; + info->enable = enable; + info->low_value = low_value; + info->high_value = high_value; + info->multiplier = 1.0; + info->offset = 0.0; + info->icon = icon; + info->graph_color = g_strdup(graph_color); + + *sensors = g_list_append(*sensors, info); } diff --git a/sensors-applet/sensors-applet-plugin.h b/sensors-applet/sensors-applet-plugin.h index 131a4ef..6d7bcdf 100644 --- a/sensors-applet/sensors-applet-plugin.h +++ b/sensors-applet/sensors-applet-plugin.h @@ -32,8 +32,8 @@ GQuark sensors_applet_plugin_error_quark(void); * structs to create the sensors for this plugin from */ GList *sensors_applet_plugin_init(void); -gdouble sensors_applet_plugin_get_sensor_value(const gchar *path, - const gchar *id, +gdouble sensors_applet_plugin_get_sensor_value(const gchar *path, + const gchar *id, SensorType type, GError **error); @@ -43,8 +43,8 @@ void sensors_applet_plugin_find_sensors(GList **sensors, const gchar *path, SensorsAppletPluginTestSensorFunc); -void sensors_applet_plugin_default_sensor_limits(SensorType type, - gdouble *low_value, +void sensors_applet_plugin_default_sensor_limits(SensorType type, + gdouble *low_value, gdouble *high_value); void sensors_applet_plugin_add_sensor(GList **sensors, @@ -56,7 +56,6 @@ void sensors_applet_plugin_add_sensor(GList **sensors, IconType icon, const gchar *graph_color); - void sensors_applet_plugin_add_sensor_with_limits(GList **sensors, const gchar *path, const gchar *id, @@ -68,5 +67,4 @@ void sensors_applet_plugin_add_sensor_with_limits(GList **sensors, IconType icon, const gchar *graph_color); - #endif // SENSORS_APPLET_PLUGIN_H diff --git a/sensors-applet/sensors-applet-plugins.c b/sensors-applet/sensors-applet-plugins.c index 94c7c69..e90895a 100644 --- a/sensors-applet/sensors-applet-plugins.c +++ b/sensors-applet/sensors-applet-plugins.c @@ -29,130 +29,113 @@ #define SENSORS_APPLET_USER_PLUGIN_DIR ".mate2/sensors-applet/plugins" -static void load_all_plugins(SensorsApplet *sensors_applet, - const gchar *path) -{ - if (g_file_test(path, - G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) { - GDir *dir; - if ((dir = g_dir_open(path, 0, NULL)) != NULL) { - const gchar *file; - while ((file = g_dir_read_name(dir)) != NULL) { - // try and open plugin - gchar *plugin_file; - void *handle; - SensorsAppletPluginName name_fn; - SensorsAppletPluginInit init_fn; - SensorsAppletPluginGetSensorValue get_value_fn; - - plugin_file = g_strdup_printf("%s/%s", path, file); - g_debug("found %s in plugin directory", plugin_file); - if ((handle = dlopen(plugin_file, RTLD_NOW)) != NULL) { - - if ((name_fn = dlsym(handle, "sensors_applet_plugin_name")) != NULL && - (init_fn = dlsym(handle, "sensors_applet_plugin_init")) != NULL && - (get_value_fn = dlsym(handle, "sensors_applet_plugin_get_sensor_value")) != NULL) { - GList *sensors; - g_debug("calling init function for plugin file %s", plugin_file); - - if ((sensors = init_fn()) != NULL) { - GList *sensor; - - g_debug("registering plugin %s", name_fn()); - g_hash_table_insert(sensors_applet->plugins, - g_strdup(name_fn()), - get_value_fn); - for (sensor = g_list_first(sensors); - sensor != NULL; - sensor = g_list_next(sensor)) { - SensorsAppletSensorInfo *sensor_info = (SensorsAppletSensorInfo *)sensor->data; - sensors_applet_add_sensor(sensors_applet, - sensor_info->path, - sensor_info->id, - sensor_info->label, - name_fn(), - sensor_info->type, - sensor_info->enable, - sensor_info->low_value, - sensor_info->high_value, - FALSE, // ALARM OFF - "", // no alarm commands - "", // no alarm commands - 0, // alarm_timeout - sensor_info->multiplier, - sensor_info->offset, - sensor_info->icon, - sensor_info->graph_color); - - // sensors_applet_add_sensor() doesn't free strings, so free them here - g_free(sensor_info->path); - g_free(sensor_info->id); - g_free(sensor_info->label); - g_free(sensor_info->graph_color); - g_free(sensor_info); - } - g_list_free(sensors); - } else { - g_debug("plugin could not find any sensors"); - if (g_hash_table_lookup(sensors_applet->required_plugins, - name_fn())) - { - g_debug("plugin is required - registering even though no sensors detected"); - g_debug("registering plugin %s", name_fn()); - g_hash_table_insert(sensors_applet->plugins, - g_strdup(name_fn()), - get_value_fn); - } else { - g_debug("unloading plugin"); - } - } - - - - } else { - g_debug("plugin file %s does not contain the required interface", plugin_file); - if (dlclose(handle) != 0) { - g_debug("error closing plugin file %s", plugin_file); - } - } - } else { - g_debug("Could not dlopen: %s: %s", plugin_file, dlerror()); - } - g_free(plugin_file); +static void load_all_plugins(SensorsApplet *sensors_applet, const gchar *path) { + + if (g_file_test(path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) { + GDir *dir; + if ((dir = g_dir_open(path, 0, NULL)) != NULL) { + const gchar *file; + while ((file = g_dir_read_name(dir)) != NULL) { + /* try and open plugin */ + gchar *plugin_file; + void *handle; + SensorsAppletPluginName name_fn; + SensorsAppletPluginInit init_fn; + SensorsAppletPluginGetSensorValue get_value_fn; + + plugin_file = g_strdup_printf("%s/%s", path, file); + g_debug("found %s in plugin directory", plugin_file); + if ((handle = dlopen(plugin_file, RTLD_NOW)) != NULL) { + + if ((name_fn = dlsym(handle, "sensors_applet_plugin_name")) != NULL && + (init_fn = dlsym(handle, "sensors_applet_plugin_init")) != NULL && + (get_value_fn = dlsym(handle, "sensors_applet_plugin_get_sensor_value")) != NULL) { + + GList *sensors; + g_debug("calling init function for plugin file %s", plugin_file); + + if ((sensors = init_fn()) != NULL) { + GList *sensor; + + g_debug("registering plugin %s", name_fn()); + g_hash_table_insert(sensors_applet->plugins, g_strdup(name_fn()), get_value_fn); + + for (sensor = g_list_first(sensors); sensor != NULL; sensor = g_list_next(sensor)) { + + SensorsAppletSensorInfo *sensor_info = (SensorsAppletSensorInfo *)sensor->data; + sensors_applet_add_sensor(sensors_applet, + sensor_info->path, + sensor_info->id, + sensor_info->label, + name_fn(), + sensor_info->type, + sensor_info->enable, + sensor_info->low_value, + sensor_info->high_value, + FALSE, /* ALARM OFF */ + "", /* no alarm commands */ + "", /* no alarm commands */ + 0, /* alarm_timeout */ + sensor_info->multiplier, + sensor_info->offset, + sensor_info->icon, + sensor_info->graph_color); + + // sensors_applet_add_sensor() doesn't free strings, so free them here + g_free(sensor_info->path); + g_free(sensor_info->id); + g_free(sensor_info->label); + g_free(sensor_info->graph_color); + g_free(sensor_info); + } + g_list_free(sensors); + } else { + g_debug("plugin could not find any sensors"); + if (g_hash_table_lookup(sensors_applet->required_plugins, name_fn())) { + g_debug("plugin is required - registering even though no sensors detected"); + g_debug("registering plugin %s", name_fn()); + g_hash_table_insert(sensors_applet->plugins, g_strdup(name_fn()), get_value_fn); + } else { + g_debug("unloading plugin"); + } + } + + } else { + g_debug("plugin file %s does not contain the required interface", plugin_file); + if (dlclose(handle) != 0) { + g_debug("error closing plugin file %s", plugin_file); } - g_dir_close(dir); + } } else { - g_debug("error opening plugin dir %s", path); + g_debug("Could not dlopen: %s: %s", plugin_file, dlerror()); } + g_free(plugin_file); + } + g_dir_close(dir); } else { - g_debug("path %s is not a valid directory", path); + g_debug("error opening plugin dir %s", path); } + } else { + g_debug("path %s is not a valid directory", path); + } } -void sensors_applet_plugins_load_all(SensorsApplet *sensors_applet) -{ - const gchar *home; - - if ((home = g_get_home_dir()) != NULL) { - gchar *path; - path = g_build_filename(home, - SENSORS_APPLET_USER_PLUGIN_DIR, - NULL); - load_all_plugins(sensors_applet, path); - g_free(path); - } else { - g_warning("could not get home dir of user"); - } - - - load_all_plugins(sensors_applet, SENSORS_APPLET_PLUGIN_DIR); +void sensors_applet_plugins_load_all(SensorsApplet *sensors_applet) { + const gchar *home; + + if ((home = g_get_home_dir()) != NULL) { + gchar *path; + path = g_build_filename(home, SENSORS_APPLET_USER_PLUGIN_DIR, NULL); + load_all_plugins(sensors_applet, path); + g_free(path); + } else { + g_warning("could not get home dir of user"); + } + + load_all_plugins(sensors_applet, SENSORS_APPLET_PLUGIN_DIR); } -SensorsAppletPluginGetSensorValue sensors_applet_plugins_get_sensor_value_func(SensorsApplet *sensors_applet, - const gchar *plugin) -{ - return g_hash_table_lookup(sensors_applet->plugins, - plugin); +SensorsAppletPluginGetSensorValue sensors_applet_plugins_get_sensor_value_func(SensorsApplet *sensors_applet, const gchar *plugin) { + return g_hash_table_lookup(sensors_applet->plugins, plugin); } - diff --git a/sensors-applet/sensors-applet-plugins.h b/sensors-applet/sensors-applet-plugins.h index a77d0b2..14fd110 100644 --- a/sensors-applet/sensors-applet-plugins.h +++ b/sensors-applet/sensors-applet-plugins.h @@ -23,8 +23,8 @@ typedef const gchar *(*SensorsAppletPluginName)(void); typedef GList *(*SensorsAppletPluginInit)(void); -typedef gdouble (*SensorsAppletPluginGetSensorValue)(const gchar *path, - const gchar *id, +typedef gdouble (*SensorsAppletPluginGetSensorValue)(const gchar *path, + const gchar *id, SensorType type, GError **error); |