2
0
mirror of https://github.com/lm-sensors/lm-sensors synced 2025-08-31 06:15:15 +00:00

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.

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=469333

Parsing the configuration file in C locale fixes the problem.
Original patch from Aurelien Jarno.


git-svn-id: http://lm-sensors.org/svn/lm-sensors/branches/lm-sensors-3.0.0@5169 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
Jean Delvare
2008-04-08 14:50:13 +00:00
parent f2e518511d
commit 399410079f
2 changed files with 30 additions and 2 deletions

View File

@@ -3,6 +3,7 @@ lm-sensors CHANGES file
SVN-HEAD
libsensors: Use __func__ instead of __FUNCTION__
Parse the configuration file in C locale
sensors-detect: Add SMSC SCH5027D detection
Do not access I/O ports on PPC
Move south bridge sensor detection to the right section

View File

@@ -19,8 +19,10 @@
MA 02110-1301 USA.
*/
#include <locale.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include "sensors.h"
#include "data.h"
@@ -34,6 +36,31 @@
#define DEFAULT_CONFIG_FILE ETCDIR "/sensors3.conf"
#define ALT_CONFIG_FILE ETCDIR "/sensors.conf"
/* Wrapper around sensors_yyparse(), which clears the locale so that
the decimal numbers are always parsed properly. */
static int sensors_parse(void)
{
int res;
char *locale;
/* Remember the current locale and clear it */
locale = setlocale(LC_ALL, NULL);
if (locale) {
locale = strdup(locale);
setlocale(LC_ALL, "C");
}
res = sensors_yyparse();
/* Restore the old locale */
if (locale) {
setlocale(LC_ALL, locale);
free(locale);
}
return res;
}
int sensors_init(FILE *input)
{
int res;
@@ -47,7 +74,7 @@ int sensors_init(FILE *input)
res = -SENSORS_ERR_PARSE;
if (input) {
if (sensors_scanner_init(input) ||
sensors_yyparse())
sensors_parse())
goto exit_cleanup;
} else {
/* No configuration provided, use default */
@@ -56,7 +83,7 @@ int sensors_init(FILE *input)
input = fopen(ALT_CONFIG_FILE, "r");
if (input) {
if (sensors_scanner_init(input) ||
sensors_yyparse()) {
sensors_parse()) {
fclose(input);
goto exit_cleanup;
}