]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdstat.c
maps: Terminate 'modes' map correctly.
[thirdparty/mdadm.git] / mdstat.c
index 8b16d3e89ec6b66c08b465b26d14f646f0ffc08b..39628967047e7b8275269871fdd79507fa5112e3 100644 (file)
--- a/mdstat.c
+++ b/mdstat.c
@@ -114,7 +114,6 @@ void free_mdstat(struct mdstat_ent *ms)
 {
        while (ms) {
                struct mdstat_ent *t;
-               free(ms->dev);
                free(ms->level);
                free(ms->pattern);
                free(ms->metadata_version);
@@ -134,7 +133,11 @@ struct mdstat_ent *mdstat_read(int hold, int start)
        int fd;
 
        if (hold && mdstat_fd != -1) {
-               lseek(mdstat_fd, 0L, 0);
+               off_t offset = lseek(mdstat_fd, 0L, 0);
+               if (offset == (off_t)-1) {
+                       mdstat_close();
+                       return NULL;
+               }
                fd = dup(mdstat_fd);
                if (fd >= 0)
                        f = fdopen(fd, "r");
@@ -169,7 +172,7 @@ struct mdstat_ent *mdstat_read(int hold, int start)
                strcpy(devnm, line);
 
                ent = xmalloc(sizeof(*ent));
-               ent->dev = ent->level = ent->pattern= NULL;
+               ent->level = ent->pattern= NULL;
                ent->next = NULL;
                ent->percent = RESYNC_NONE;
                ent->active = -1;
@@ -179,7 +182,6 @@ struct mdstat_ent *mdstat_read(int hold, int start)
                ent->devcnt = 0;
                ent->members = NULL;
 
-               ent->dev = xstrdup(line);
                strcpy(ent->devnm, devnm);
 
                for (w=dl_next(line); w!= line ; w=dl_next(w)) {