@@ -432,6 +432,33 @@ static char* mount_get_serial(char *dev)
return disc_id;
}
+static void mount_dev_get_property(char *name, char *prop_val,
+ const char *prop_name)
+{
+ char tmp[64];
+ FILE *fp;
+
+ snprintf(tmp, 64, "/sys/class/block/%s/device/%s", name, prop_name);
+ fp = fopen(tmp, "r");
+ if(!fp)
+ {
+ snprintf(tmp, 64, "/sys/block/%s/device/%s", name, prop_name);
+ fp = fopen(tmp, "r");
+ }
+ if(!fp)
+ goto unknown;
+ else {
+ if (!fgets(prop_val, 64, fp))
+ goto unknown;
+
+ prop_val[strlen(prop_val) - 1] = '\0';
+ fclose(fp);
+ return;
+ }
+unknown:
+ snprintf(prop_val, 64, "unknown");
+}
+
static void mount_dev_add(char *dev)
{
struct mount *mount = mount_find(0, dev);
@@ -489,62 +516,12 @@ static void mount_dev_add(char *dev)
}
strcpy(name, dev);
name[3] = '\0';
- snprintf(tmp, 64, "/sys/class/block/%s/device/model", name);
- fp = fopen(tmp, "r");
- if(!fp)
- {
- snprintf(tmp, 64, "/sys/block/%s/device/model", name);
- fp = fopen(tmp, "r");
- }
- if(!fp)
- snprintf(model, 64, "unknown");
- else {
- fgets(model, 64, fp);
- model[strlen(model) - 1] = '\0';;
- fclose(fp);
- }
- snprintf(tmp, 64, "/sys/class/block/%s/device/vendor", name);
- fp = fopen(tmp, "r");
- if(!fp)
- {
- snprintf(tmp, 64, "/sys/block/%s/device/vendor", name);
- fp = fopen(tmp, "r");
- }
- if(!fp)
- snprintf(vendor, 64, "unknown");
- else {
- fgets(vendor, 64, fp);
- vendor[strlen(vendor) - 1] = '\0';
- fclose(fp);
- }
- snprintf(tmp, 64, "/sys/class/block/%s/device/rev", name);
- fp = fopen(tmp, "r");
- if(!fp)
- {
- snprintf(tmp, 64, "/sys/block/%s/device/rev", name);
- fp = fopen(tmp, "r");
- }
- if(!fp)
- snprintf(rev, 64, "unknown");
- else {
- fgets(rev, 64, fp);
- rev[strlen(rev) - 1] = '\0';
- fclose(fp);
- }
- snprintf(tmp, 64, "/sys/class/block/%s/size", dev);
- fp = fopen(tmp, "r");
- if(!fp)
- {
- snprintf(tmp, 64, "/sys/block/%s/%s/size", name, dev);
- fp = fopen(tmp, "r");
- }
- if(!fp)
- snprintf(size, 64, "unknown");
- else {
- fgets(size, 64, fp);
- size[strlen(size) - 1] = '\0';
- fclose(fp);
- }
+
+ mount_dev_get_property(name, model, "model");
+ mount_dev_get_property(name, vendor, "vendor");
+ mount_dev_get_property(name, rev, "rev");
+ mount_dev_get_property(name, size, "size");
+
strcpy(tmp2, dev);
tmp2[3] = '\0';
snprintf(tmp, 64, "/sys/block/%s/queue/hw_sector_size", tmp2);
Factor the code obtaining a bunch of a block devices attributes: vendor, rev, model, size since this is a repetitive and identical procedure for each of these. This also fixes unused fgets() return values for these parts of the code. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- mount.c | 89 ++++++++++++++++++++++++----------------------------------------- 1 file changed, 33 insertions(+), 56 deletions(-)