[lm-sensors] [PATCH] Parse the configuration file in C locale
Aurelien Jarno
aurelien at aurel32.net
Sun Apr 6 22:58:39 CEST 2008
The configuration file is currently parsed in the locale set by the main
program using the library. This means that if the decimal separator
(defined in LC_NUMERIC) is not '.' the values in the compute lines are
truncated. This happens for example with sensors-applet and a French
locale.
The patch below is an attempt to fix that. There may be more clever ways
to do that, but currently I fail to find them.
Index: lib/init.c
===================================================================
--- lib/init.c (révision 5168)
+++ lib/init.c (copie de travail)
@@ -19,6 +19,7 @@
MA 02110-1301 USA.
*/
+#include <locale.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
@@ -37,6 +38,7 @@
int sensors_init(FILE *input)
{
int res;
+ char *locale = NULL;
if (!sensors_init_sysfs())
return -SENSORS_ERR_KERNEL;
@@ -44,6 +46,13 @@
(res = sensors_read_sysfs_chips()))
goto exit_cleanup;
+ /* Read the current locale */
+ locale = setlocale(LC_NUMERIC, NULL);
+ if (locale)
+ locale = strdup(locale);
+ /* Set the locale to C */
+ setlocale(LC_NUMERIC, "C");
+
res = -SENSORS_ERR_PARSE;
if (input) {
if (sensors_scanner_init(input) ||
@@ -64,11 +73,21 @@
}
}
+ /* Restore the old locale */
+ if (locale) {
+ setlocale(LC_NUMERIC, locale);
+ free(locale);
+ }
if ((res = sensors_substitute_busses()))
goto exit_cleanup;
return 0;
exit_cleanup:
+ /* Restore the old locale */
+ if (locale) {
+ setlocale(LC_NUMERIC, locale);
+ free(locale);
+ }
sensors_cleanup();
return res;
}
--
.''`. Aurelien Jarno | GPG: 1024D/F1BCDB73
: :' : Debian developer | Electrical Engineer
`. `' aurel32 at debian.org | aurelien at aurel32.net
`- people.debian.org/~aurel32 | www.aurel32.net
More information about the lm-sensors
mailing list