diff --git a/lib/access.c b/lib/access.c index 33809d95..a32339f9 100644 --- a/lib/access.c +++ b/lib/access.c @@ -58,7 +58,7 @@ int sensors_match_chip(sensors_chip_name chip1, sensors_chip_name chip2) Note that this visits the list of chips from last to first. Usually, you want the match that was latest in the config file. */ sensors_chip *sensors_for_all_config_chips(sensors_chip_name chip_name, - sensors_chip *last) + const sensors_chip *last) { int nr,i; sensors_chip_name_list chips; @@ -77,10 +77,11 @@ sensors_chip *sensors_for_all_config_chips(sensors_chip_name chip_name, /* Look up a resource in the intern chip list, and return a pointer to it. Do not modify the struct the return value points to! Returns NULL if not found.*/ -sensors_chip_feature *sensors_lookup_feature_nr(const char *prefix, int feature) +const sensors_chip_feature *sensors_lookup_feature_nr(const char *prefix, + int feature) { int i,j; - sensors_chip_feature *features; + const sensors_chip_feature *features; for (i = 0; sensors_chip_features_list[i].prefix; i++) if (!strcmp(sensors_chip_features_list[i].prefix,prefix)) { features = sensors_chip_features_list[i].feature; @@ -94,11 +95,11 @@ sensors_chip_feature *sensors_lookup_feature_nr(const char *prefix, int feature) /* Look up a resource in the intern chip list, and return a pointer to it. Do not modify the struct the return value points to! Returns NULL if not found.*/ -sensors_chip_feature *sensors_lookup_feature_name(const char *prefix, - const char *feature) +const sensors_chip_feature *sensors_lookup_feature_name(const char *prefix, + const char *feature) { int i,j; - sensors_chip_feature *features; + const sensors_chip_feature *features; for (i = 0; sensors_chip_features_list[i].prefix; i++) if (!strcmp(sensors_chip_features_list[i].prefix,prefix)) { features = sensors_chip_features_list[i].feature; @@ -129,8 +130,8 @@ int sensors_chip_name_has_wildcards(sensors_chip_name chip) This function will return 0 on success, and <0 on failure. */ int sensors_get_label(sensors_chip_name name, int feature, char **result) { - sensors_chip *chip; - sensors_chip_feature *featureptr; + const sensors_chip *chip; + const sensors_chip_feature *featureptr; int i; if (sensors_chip_name_has_wildcards(name)) @@ -151,13 +152,13 @@ int sensors_get_label(sensors_chip_name name, int feature, char **result) /* Read the value of a feature of a certain chip. Note that chip should not contain wildcard values! This function will return 0 on success, and <0 - on failure. */ + on failure. */ int sensors_get_feature(sensors_chip_name name, int feature, double *result) { - sensors_chip_feature *main_feature; - sensors_chip_feature *alt_feature; - sensors_chip *chip; - sensors_expr *expr = NULL; + const sensors_chip_feature *main_feature; + const sensors_chip_feature *alt_feature; + const sensors_chip *chip; + const sensors_expr *expr = NULL; double val; int res,i; int final_expr=0; @@ -194,12 +195,12 @@ int sensors_get_feature(sensors_chip_name name, int feature, double *result) /* Set the value of a feature of a certain chip. Note that chip should not contain wildcard values! This function will return 0 on success, and <0 - on failure. */ + on failure. BUGGY! */ int sensors_set_feature(sensors_chip_name name, int feature, double value) { - sensors_chip_feature *featureptr; - sensors_chip *chip; - sensors_expr *expr = NULL; + const sensors_chip_feature *featureptr; + const sensors_chip *chip; + const sensors_expr *expr = NULL; int i,res; if (sensors_chip_name_has_wildcards(name)) @@ -280,12 +281,12 @@ const sensors_feature_data *sensors_get_all_features (sensors_chip_name name, return NULL; } -int sensors_eval_expr(sensors_chip_name chipname, sensors_expr *expr, +int sensors_eval_expr(sensors_chip_name chipname, const sensors_expr *expr, double val, double *result) { double res1,res2; int res; - sensors_chip_feature *feature; + const sensors_chip_feature *feature; if (expr->kind == sensors_kind_val) { *result = expr->data.val; @@ -329,5 +330,3 @@ int sensors_eval_expr(sensors_chip_name chipname, sensors_expr *expr, } return 0; } - - diff --git a/lib/access.h b/lib/access.h index 9545a9d3..81dc684f 100644 --- a/lib/access.h +++ b/lib/access.h @@ -31,19 +31,19 @@ Note that this visits the list of chips from last to first. Usually, you want the match that was latest in the config file. */ extern sensors_chip *sensors_for_all_config_chips(sensors_chip_name chip_name, - sensors_chip *last); + const sensors_chip *last); /* Look up a resource in the intern chip list, and return a pointer to it. Do not modify the struct the return value points to! Returns NULL if not found. */ -extern sensors_chip_feature *sensors_lookup_feature_nr(const char *prefix, - int feature); +extern const sensors_chip_feature *sensors_lookup_feature_nr(const char *prefix, + int feature); /* Look up a resource in the intern chip list, and return a pointer to it. Do not modify the struct the return value points to! Returns NULL if not found.*/ -extern sensors_chip_feature *sensors_lookup_feature_name(const char *prefix, - const char *feature); +extern const sensors_chip_feature *sensors_lookup_feature_name + (const char *prefix, const char *feature); /* Substitute configuration bus numbers with real-world /proc bus numbers in the chips lists */ @@ -55,7 +55,8 @@ extern int sensors_substitute_busses(void); extern int sensors_parse_i2cbus_name(const char *name, int *res); /* Evaluate an expression */ -extern int sensors_eval_expr(sensors_chip_name chipname, sensors_expr *expr, +extern int sensors_eval_expr(sensors_chip_name chipname, + const sensors_expr *expr, double val, double *result); diff --git a/lib/error.c b/lib/error.c index 3ea6f094..047df0de 100644 --- a/lib/error.c +++ b/lib/error.c @@ -52,7 +52,7 @@ const char *sensors_strerror(int errnum) void sensors_default_parse_error(const char *err, int lineno) { - fprintf(stderr,"Line %d: %s\n",lineno,err); + fprintf(stderr,"Error: Line %d: %s\n",lineno,err); } void sensors_default_fatal_error(const char *proc, const char *err) diff --git a/lib/proc.c b/lib/proc.c index 9de85b86..9d3a5b48 100644 --- a/lib/proc.c +++ b/lib/proc.c @@ -67,20 +67,24 @@ int sensors_read_proc_chips(void) int buflen = BUF_LEN; char *bufptr = buf; sensors_proc_chips_entry entry; - int res; + int res,lineno; if (sysctl(name, 3, bufptr, &buflen, NULL, 0)) return -SENSORS_ERR_PROC; + lineno = 1; while (buflen >= sizeof(struct sensors_chips_data)) { if ((res = sensors_parse_chip_name(((struct sensors_chips_data *) bufptr)->name, - &entry.name))) + &entry.name))) { + sensors_parse_error("Parsing /proc/sys/dev/sensors/chips",lineno); return res; + } entry.sysctl = ((struct sensors_chips_data *) bufptr)->sysctl_id; add_proc_chips(&entry); bufptr += sizeof(struct sensors_chips_data); buflen -= sizeof(struct sensors_chips_data); + lineno++; } return 0; } @@ -91,9 +95,12 @@ int sensors_read_proc_bus(void) char line[255]; char *border; sensors_bus entry; + int lineno; + f = fopen("/proc/bus/i2c","r"); if (!f) return -SENSORS_ERR_PROC; + lineno=1; while (fgets(line,255,f)) { if (strlen(line) > 0) line[strlen(line)-1] = '\0'; @@ -117,12 +124,14 @@ int sensors_read_proc_bus(void) sensors_strip_of_spaces(entry.algorithm); sensors_strip_of_spaces(entry.adapter); add_bus(&entry); + lineno++; } fclose(f); return 0; FAT_ERROR: sensors_fatal_error("sensors_read_proc_bus","Allocating entry"); ERROR: + sensors_parse_error("Parsing /proc/bus/i2c",lineno); fclose(f); return -SENSORS_ERR_PROC; } @@ -142,7 +151,7 @@ int sensors_get_chip_id(sensors_chip_name name) int sensors_read_proc(sensors_chip_name name, int feature, double *value) { int sysctl_name[4] = { CTL_DEV, DEV_SENSORS }; - sensors_chip_feature *the_feature; + const sensors_chip_feature *the_feature; int buflen = BUF_LEN; int mag; @@ -164,7 +173,7 @@ int sensors_read_proc(sensors_chip_name name, int feature, double *value) int sensors_write_proc(sensors_chip_name name, int feature, double value) { int sysctl_name[4] = { CTL_DEV, DEV_SENSORS }; - sensors_chip_feature *the_feature; + const sensors_chip_feature *the_feature; int buflen = BUF_LEN; int mag;