Changeset 5649

Show
Ignore:
Timestamp:
02/15/09 18:26:57 (5 years ago)
Author:
khali
Message:

Include the configuration file name when reporting parse errors.

Location:
lm-sensors/trunk
Files:
9 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/trunk/CHANGES

    r5647 r5649  
    1313              Exit the configuration file parser sooner 
    1414              Free bus statements from the configuration file sooner 
    15               Read extra configuration files from /etc/sensors.d 
     15              Read extra configuration files from /etc/sensors.d (#2174) 
     16              Report the configuration file name on parse errors 
    1617  lm_sensors.init: Support new format of /etc/sysconfig/lm_sensors (#2246) 
    1718                   Drop support for kernels 2.4 and earlier 
  • lm-sensors/trunk/doc/libsensors-API.txt

    r5593 r5649  
    2525* Added error value for excessive recursion depth 
    2626  #define SENSORS_ERR_RECURSION 11 
     27* Added parse error reporting function including the configuration file 
     28  name 
     29  extern void (*sensors_parse_error_wfn) (const char *err, 
     30                                          const char *filename, int lineno); 
    2731 
    28320x401   lm-sensors 3.0.2 to 3.0.3 
  • lm-sensors/trunk/lib/access.c

    r5648 r5649  
    22    access.c - Part of libsensors, a Linux library for reading sensor data. 
    33    Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl> 
    4     Copyright (C) 2007, 2008  Jean Delvare <khali@linux-fr.org> 
     4    Copyright (C) 2007-2009   Jean Delvare <khali@linux-fr.org> 
    55 
    66    This program is free software; you can redistribute it and/or modify 
     
    512512                                                        chip->sets[i].name); 
    513513                        if (!subfeature) { 
    514                                 sensors_parse_error("Unknown feature name", 
     514                                sensors_parse_error_wfn("Unknown feature name", 
     515                                                    chip->sets[i].line.filename, 
    515516                                                    chip->sets[i].line.lineno); 
    516517                                err = -SENSORS_ERR_NO_ENTRY; 
     
    522523                                                0, &value); 
    523524                        if (res) { 
    524                                 sensors_parse_error("Error parsing expression", 
     525                                sensors_parse_error_wfn("Error parsing expression", 
     526                                                    chip->sets[i].line.filename, 
    525527                                                    chip->sets[i].line.lineno); 
    526528                                err = res; 
     
    529531                        if ((res = sensors_set_value(name, subfeature->number, 
    530532                                                     value))) { 
    531                                 sensors_parse_error("Failed to set value", 
     533                                sensors_parse_error_wfn("Failed to set value", 
     534                                                chip->sets[i].line.filename, 
    532535                                                chip->sets[i].line.lineno); 
    533536                                err = res; 
  • lm-sensors/trunk/lib/conf-parse.y

    r5648 r5649  
    333333{ 
    334334  if (sensors_lex_error[0]) { 
    335     sensors_parse_error(sensors_lex_error,sensors_yylineno); 
     335    sensors_parse_error_wfn(sensors_lex_error, sensors_yyfilename, sensors_yylineno); 
    336336    sensors_lex_error[0] = '\0'; 
    337337  } else 
    338     sensors_parse_error(err,sensors_yylineno); 
     338    sensors_parse_error_wfn(err, sensors_yyfilename, sensors_yylineno); 
    339339} 
    340340 
  • lm-sensors/trunk/lib/conf.h

    r5163 r5649  
    2525int sensors_yylex(void); 
    2626extern char sensors_lex_error[]; 
     27extern const char *sensors_yyfilename; 
    2728extern int sensors_yylineno; 
    2829extern FILE *sensors_yyin; 
  • lm-sensors/trunk/lib/data.c

    r5648 r5649  
    203203} 
    204204 
    205 static int sensors_substitute_chip(sensors_chip_name *name, int lineno) 
     205static int sensors_substitute_chip(sensors_chip_name *name, 
     206                                   const char *filename, int lineno) 
    206207{ 
    207208        int i, j; 
     
    212213 
    213214        if (i == sensors_config_busses_count) { 
    214                 sensors_parse_error("Undeclared bus id referenced", lineno); 
     215                sensors_parse_error_wfn("Undeclared bus id referenced", 
     216                                        filename, lineno); 
    215217                name->bus.nr = SENSORS_BUS_NR_IGNORE; 
    216218                return -SENSORS_ERR_BUS_NAME; 
     
    239241        int err, i, j, lineno; 
    240242        sensors_chip_name_list *chips; 
     243        const char *filename; 
    241244        int res = 0; 
    242245 
    243246        for (i = sensors_config_chips_subst; 
    244247             i < sensors_config_chips_count; i++) { 
     248                filename = sensors_config_chips[i].line.filename; 
    245249                lineno = sensors_config_chips[i].line.lineno; 
    246250                chips = &sensors_config_chips[i].chips; 
     
    251255                                continue; 
    252256 
    253                         err = sensors_substitute_chip(&chips->fits[j], lineno); 
     257                        err = sensors_substitute_chip(&chips->fits[j], 
     258                                                      filename, lineno); 
    254259                        if (err) 
    255260                                res = err; 
  • lm-sensors/trunk/lib/error.c

    r5638 r5649  
    22    error.c - Part of libsensors, a Linux library for reading sensor data. 
    33    Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl> 
    4     Copyright (C) 2007, 2008  Jean Delvare <khali@linux-fr.org> 
     4    Copyright (C) 2007-2009   Jean Delvare <khali@linux-fr.org> 
    55 
    66    This program is free software; you can redistribute it and/or modify 
     
    2626 
    2727static void sensors_default_parse_error(const char *err, int lineno); 
     28static void sensors_default_parse_error_wfn(const char *err, 
     29                                            const char *filename, int lineno); 
    2830static void sensors_default_fatal_error(const char *proc, const char *err); 
    2931 
    3032void (*sensors_parse_error) (const char *err, int lineno) = 
    3133                                                sensors_default_parse_error; 
     34void (*sensors_parse_error_wfn) (const char *err, const char *filename, 
     35                                 int lineno) = sensors_default_parse_error_wfn; 
    3236void (*sensors_fatal_error) (const char *proc, const char *err) = 
    3337                                                sensors_default_fatal_error; 
     
    6569} 
    6670 
     71void sensors_default_parse_error_wfn(const char *err, 
     72                                     const char *filename, int lineno) 
     73{ 
     74        /* If application provided a custom parse error reporting function 
     75           but not the variant with the filename, fall back to the original 
     76           variant without the filename, for backwards compatibility. */ 
     77        if (sensors_parse_error != sensors_default_parse_error || 
     78            !filename) 
     79                return sensors_parse_error(err, lineno); 
     80 
     81        if (lineno) 
     82                fprintf(stderr, "Error: File %s, line %d: %s\n", filename, 
     83                        lineno, err); 
     84        else 
     85                fprintf(stderr, "Error: File %s: %s\n", filename, err); 
     86} 
     87 
    6788void sensors_default_fatal_error(const char *proc, const char *err) 
    6889{ 
  • lm-sensors/trunk/lib/error.h

    r5582 r5649  
    22    error.h - Part of libsensors, a Linux library for reading sensor data. 
    33    Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl> 
    4     Copyright (C) 2007, 2008  Jean Delvare <khali@linux-fr.org> 
     4    Copyright (C) 2007-2009   Jean Delvare <khali@linux-fr.org> 
    55 
    66    This program is free software; you can redistribute it and/or modify 
     
    4545const char *sensors_strerror(int errnum); 
    4646 
    47 /* This function is called when a parse error is detected. Give it a new 
    48    value, and your own function is called instead of the default (which 
    49    prints to stderr). This function may terminate the program, but it 
    50    usually outputs an error and returns. */ 
     47/* These functions are called when a parse error is detected. Give them new 
     48   values, and your own functions are called instead of the default (which 
     49   print to stderr). These functions may terminate the program, but they 
     50   usually output an error and return. The first function is the original 
     51   one, the second one was added later when support for multiple 
     52   configuration files was added. 
     53   The library code now only calls the second function. However, for 
     54   backwards compatibility, if an application provides a custom handling 
     55   function for the first function but not the second, then all parse 
     56   errors will be reported using the first function (that is, the filename 
     57   is never reported.) 
     58   Note that filename can be NULL (if filename isn't known) and lineno 
     59   can be 0 (if the error occurs before the actual parsing starts.) */ 
    5160extern void (*sensors_parse_error) (const char *err, int lineno); 
     61extern void (*sensors_parse_error_wfn) (const char *err, 
     62                                        const char *filename, int lineno); 
    5263 
    5364/* This function is called when an immediately fatal error (like no 
  • lm-sensors/trunk/lib/init.c

    r5648 r5649  
    126126        count = scandir(dir, &namelist, config_file_filter, alphasort); 
    127127        if (count < 0) { 
    128                 sensors_parse_error(strerror(errno), 0); 
     128                sensors_parse_error_wfn(strerror(errno), NULL, 0); 
    129129                return -SENSORS_ERR_PARSE; 
    130130        } 
     
    148148                } else { 
    149149                        res = -SENSORS_ERR_PARSE; 
    150                         sensors_parse_error(strerror(errno), 0); 
     150                        sensors_parse_error_wfn(strerror(errno), path, 0); 
    151151                } 
    152152        } 
     
    188188 
    189189                } else if (errno != ENOENT) { 
    190                         sensors_parse_error(strerror(errno), 0); 
     190                        sensors_parse_error_wfn(strerror(errno), name, 0); 
    191191                        res = -SENSORS_ERR_PARSE; 
    192192                        goto exit_cleanup;