summaryrefslogtreecommitdiff
path: root/lib/init.c
diff options
context:
space:
mode:
authorJean Delvare <khali@linux-fr.org>2009-02-15 17:18:01 +0000
committerJean Delvare <khali@linux-fr.org>2009-02-15 17:18:01 +0000
commitd5bead602534bcb59a09debf4f6546915219ca52 (patch)
treee5cae94365aebc902eb97b111e974ca41a30dc92 /lib/init.c
parent16dbc995ecb7f1f4d67c30ea462cff88365bf506 (diff)
downloadlm-sensors-git-d5bead602534bcb59a09debf4f6546915219ca52.tar.gz
Free bus statements from the configuration file as soon as we are done
with them. git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@5645 7894878c-1315-0410-8ee3-d5d059ff63e0
Diffstat (limited to 'lib/init.c')
-rw-r--r--lib/init.c47
1 files changed, 29 insertions, 18 deletions
diff --git a/lib/init.c b/lib/init.c
index 060d045d..71af5aff 100644
--- a/lib/init.c
+++ b/lib/init.c
@@ -61,18 +61,42 @@ static int sensors_parse(void)
return res;
}
+static void free_bus(sensors_bus *bus)
+{
+ free(bus->adapter);
+}
+
+static void free_config_busses(void)
+{
+ int i;
+
+ for (i = 0; i < sensors_config_busses_count; i++)
+ free_bus(&sensors_config_busses[i]);
+ free(sensors_config_busses);
+ sensors_config_busses = NULL;
+ sensors_config_busses_count = sensors_config_busses_max = 0;
+}
+
static int parse_config(FILE *input)
{
int err;
- if (sensors_scanner_init(input))
- return -SENSORS_ERR_PARSE;
+ if (sensors_scanner_init(input)) {
+ err = -SENSORS_ERR_PARSE;
+ goto exit_cleanup;
+ }
err = sensors_parse();
sensors_scanner_exit();
- if (err)
- return -SENSORS_ERR_PARSE;
+ if (err) {
+ err = -SENSORS_ERR_PARSE;
+ goto exit_cleanup;
+ }
- return 0;
+ err = sensors_substitute_busses();
+
+exit_cleanup:
+ free_config_busses();
+ return err;
}
int sensors_init(FILE *input)
@@ -107,8 +131,6 @@ int sensors_init(FILE *input)
}
}
- if ((res = sensors_substitute_busses()))
- goto exit_cleanup;
return 0;
exit_cleanup:
@@ -134,11 +156,6 @@ static void free_chip_features(sensors_chip_features *features)
free(features->feature);
}
-static void free_bus(sensors_bus *bus)
-{
- free(bus->adapter);
-}
-
static void free_label(sensors_label *label)
{
free(label->name);
@@ -218,12 +235,6 @@ void sensors_cleanup(void)
sensors_proc_chips = NULL;
sensors_proc_chips_count = sensors_proc_chips_max = 0;
- for (i = 0; i < sensors_config_busses_count; i++)
- free_bus(&sensors_config_busses[i]);
- free(sensors_config_busses);
- sensors_config_busses = NULL;
- sensors_config_busses_count = sensors_config_busses_max = 0;
-
for (i = 0; i < sensors_config_chips_count; i++)
free_chip(&sensors_config_chips[i]);
free(sensors_config_chips);