From b836fc0b53bccf861b30cbd0eb51fde263bd5c4f Mon Sep 17 00:00:00 2001 From: Jean Delvare Date: Wed, 5 Sep 2007 08:21:19 +0000 Subject: [PATCH] Now that we can deduce the scaling factor required for each feature from its type, there's no need to store this scaling factor. We can instead compute it at runtime. This saves some memory (about 10 kB in my real-world test), and the runtime overhead is totally negligible. git-svn-id: http://lm-sensors.org/svn/lm-sensors/branches/lm-sensors-3.0.0@4762 7894878c-1315-0410-8ee3-d5d059ff63e0 --- lib/data.h | 5 +---- lib/sysfs.c | 18 ++++++------------ 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/lib/data.h b/lib/data.h index 82afd0e0..cd1b6806 100644 --- a/lib/data.h +++ b/lib/data.h @@ -131,12 +131,9 @@ typedef struct sensors_bus { fan_div) flags is a bitfield, its value is a combination of SENSORS_MODE_R (readable), SENSORS_MODE_W (writable) and SENSORS_COMPUTE_MAPPING (affected by the - computation rules of the main feature). - scaling is the number of decimal points to scale by. - Divide the read value by 10**scaling to get the real value. */ + computation rules of the main feature). */ typedef struct sensors_chip_feature { sensors_feature_data data; - int scaling; } sensors_chip_feature; /* Internal data about all features of a type of chip */ diff --git a/lib/sysfs.c b/lib/sysfs.c index f9d28eb3..dfbc4882 100644 --- a/lib/sysfs.c +++ b/lib/sysfs.c @@ -48,16 +48,16 @@ int get_type_scaling(int type) switch (type & 0xFF10) { case SENSORS_FEATURE_IN: case SENSORS_FEATURE_TEMP: - return 3; + return 1000; case SENSORS_FEATURE_FAN: - return 0; + return 1; } switch (type) { case SENSORS_FEATURE_VID: - return 3; + return 1000; default: - return 0; + return 1; } } @@ -155,8 +155,6 @@ static int sensors_read_dynamic_chip(sensors_chip_features *chip, if (attr->method & SYSFS_METHOD_STORE) feature.data.flags |= SENSORS_MODE_W; - feature.scaling = get_type_scaling(type); - features[i] = feature; fnum++; } @@ -422,7 +420,6 @@ int sensors_read_sysfs_attr(const sensors_chip_name *name, int feature, double *value) { const sensors_chip_feature *the_feature; - int mag; char n[NAME_MAX]; FILE *f; const char *suffix = ""; @@ -443,8 +440,7 @@ int sensors_read_sysfs_attr(const sensors_chip_name *name, int feature, fclose(f); if (res != 1) return -SENSORS_ERR_PROC; - for (mag = the_feature->scaling; mag > 0; mag --) - *value /= 10.0; + *value /= get_type_scaling(the_feature->data.type); } else return -SENSORS_ERR_PROC; @@ -455,7 +451,6 @@ int sensors_write_sysfs_attr(const sensors_chip_name *name, int feature, double value) { const sensors_chip_feature *the_feature; - int mag; char n[NAME_MAX]; FILE *f; const char *suffix = ""; @@ -472,8 +467,7 @@ int sensors_write_sysfs_attr(const sensors_chip_name *name, int feature, snprintf(n, NAME_MAX, "%s/%s%s", name->path, the_feature->data.name, suffix); if ((f = fopen(n, "w"))) { - for (mag = the_feature->scaling; mag > 0; mag --) - value *= 10.0; + value *= get_type_scaling(the_feature->data.type); fprintf(f, "%d", (int) value); fclose(f); } else