libsensors: Report I/O errors as such.

git-svn-id: http://lm-sensors.org/svn/lm-sensors/branches/lm-sensors-3.0.0@4899 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
Jean Delvare committed 2007-09-29 18:48:20 +00:00
1 parent fa1f1aef32
commit 8a62e5f651
4 files changed
+37 -6

No files matched your search

+1
View File
@@ -5,6 +5,7 @@ SVN
Makefile: Add sensors-conf-convert to make install
libsensors: Notify the caller when writing a value fails
Differentiate between different read error types
Report I/O errors as such
sensord: Log the error code on failure
sensors: Fix spurious critical temperature alarm
Print error messages to stderr
+1
View File
@@ -42,6 +42,7 @@ static const char *errorlist[] = {
/* SENSORS_ERR_BUS_NAME */ "Can't parse bus name",
/* SENSORS_ERR_PARSE */ "General parse error",
/* SENSORS_ERR_ACCESS_W */ "Can't write",
/* SENSORS_ERR_IO */ "I/O error",
};
const char *sensors_strerror(int errnum)
+1
View File
@@ -30,6 +30,7 @@
#define SENSORS_ERR_BUS_NAME 7 /* Can't parse bus name */
#define SENSORS_ERR_PARSE 8 /* General parse error */
#define SENSORS_ERR_ACCESS_W 9 /* Can't write */
#define SENSORS_ERR_IO 10 /* I/O error */
#ifdef __cplusplus
extern "C" {
+34 -6
View File
@@ -557,9 +557,24 @@ int sensors_read_sysfs_attr(const sensors_chip_name *name,
snprintf(n, NAME_MAX, "%s/%s", name->path, subfeature->name);
if ((f = fopen(n, "r"))) {
int res = fscanf(f, "%lf", value);
if (fclose(f) || res != 1)
return -SENSORS_ERR_ACCESS_R;
int res, err = 0;
errno = 0;
res = fscanf(f, "%lf", value);
if (res == EOF && errno == EIO)
err = -SENSORS_ERR_IO;
else if (res != 1)
err = -SENSORS_ERR_ACCESS_R;
res = fclose(f);
if (err)
return err;
if (res == EOF) {
if (errno == EIO)
return -SENSORS_ERR_IO;
else
return -SENSORS_ERR_ACCESS_R;
}
*value /= get_type_scaling(subfeature->type);
} else
return -SENSORS_ERR_KERNEL;
@@ -576,11 +591,24 @@ int sensors_write_sysfs_attr(const sensors_chip_name *name,
snprintf(n, NAME_MAX, "%s/%s", name->path, subfeature->name);
if ((f = fopen(n, "w"))) {
int res;
int res, err = 0;
value *= get_type_scaling(subfeature->type);
res = fprintf(f, "%d", (int) value);
if (fclose(f) || res < 0)
return -SENSORS_ERR_ACCESS_W;
if (res == -EIO)
err = -SENSORS_ERR_IO;
else if (res < 0)
err = -SENSORS_ERR_ACCESS_W;
res = fclose(f);
if (err)
return err;
if (res == EOF) {
if (errno == EIO)
return -SENSORS_ERR_IO;
else
return -SENSORS_ERR_ACCESS_W;
}
} else
return -SENSORS_ERR_KERNEL;