summaryrefslogtreecommitdiffstats
path: root/sysfs.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2009-08-11 13:02:49 +1000
committerNeilBrown <neilb@suse.de>2009-08-11 13:02:49 +1000
commit7236ee7ad4a15b0d800cfc1ccbcee78158a05ada (patch)
tree0ec44aabb9b119b23098a79f285b9a241500b3ee /sysfs.c
parenta628848379c07c79485a49c7f0c684ece02ae3b7 (diff)
downloadmdadm-7236ee7ad4a15b0d800cfc1ccbcee78158a05ada.tar.gz
mdadm-7236ee7ad4a15b0d800cfc1ccbcee78158a05ada.tar.xz
mdadm-7236ee7ad4a15b0d800cfc1ccbcee78158a05ada.zip
Handle extra 'grow' variations.
UNFINISHED
Diffstat (limited to 'sysfs.c')
-rw-r--r--sysfs.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/sysfs.c b/sysfs.c
index 56fd968..1452939 100644
--- a/sysfs.c
+++ b/sysfs.c
@@ -487,22 +487,29 @@ int sysfs_get_ll(struct mdinfo *sra, struct mdinfo *dev,
return n;
}
+int sysfs_fd_get_str(int fd, char *val, int size)
+{
+ int n;
+
+ lseek(fd, 0, 0);
+ n = read(fd, val, size);
+ if (n <= 0)
+ return -1;
+ val[n] = 0;
+ return n;
+}
+
int sysfs_get_str(struct mdinfo *sra, struct mdinfo *dev,
char *name, char *val, int size)
{
- char fname[50];
int n;
int fd;
- sprintf(fname, "/sys/block/%s/md/%s/%s",
- sra->sys_name, dev?dev->sys_name:"", name);
- fd = open(fname, O_RDONLY);
+
+ fd = sysfs_get_fd(sra, dev, name);
if (fd < 0)
return -1;
- n = read(fd, val, size);
+ n = sysfs_fd_get_str(fd, val, size);
close(fd);
- if (n <= 0)
- return -1;
- val[n] = 0;
return n;
}