mirror of
https://github.com/lm-sensors/lm-sensors.git
synced 2026-11-02 13:30:30 +00:00
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:
1 parent
fa1f1aef32
commit
8a62e5f651
4 files changed
+37
-6
No files matched your search
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
|
||||
Reference in new issue
Block a user