diff options
author | Jean Delvare <khali@linux-fr.org> | 2009-02-15 17:18:01 +0000 |
---|---|---|
committer | Jean Delvare <khali@linux-fr.org> | 2009-02-15 17:18:01 +0000 |
commit | d5bead602534bcb59a09debf4f6546915219ca52 (patch) | |
tree | e5cae94365aebc902eb97b111e974ca41a30dc92 /lib/init.c | |
parent | 16dbc995ecb7f1f4d67c30ea462cff88365bf506 (diff) | |
download | lm-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.c | 47 |
1 files changed, 29 insertions, 18 deletions
@@ -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); |