diff --git a/Manage.c b/Manage.c index c7738e1..e3d3041 100644 --- a/Manage.c +++ b/Manage.c @@ -359,6 +359,18 @@ int Manage_runstop(char *devname, int fd, int runstop, return rv; } +static struct mddev_dev *add_one(struct mddev_dev *dv, char *name, char disp) +{ + struct mddev_dev *new; + new = xmalloc(sizeof(*new)); + memset(new, 0, sizeof(*new)); + new->devname = xstrdup(name); + new->disposition = disp; + new->next = dv->next; + dv->next = new; + return new; +} + static void add_faulty(struct mddev_dev *dv, int fd, char disp) { mdu_array_info_t array; @@ -371,7 +383,6 @@ static void add_faulty(struct mddev_dev *dv, int fd, char disp) remaining_disks = array.nr_disks; for (i = 0; i < MAX_DISKS && remaining_disks > 0; i++) { - struct mddev_dev *new; char buf[40]; disk.number = i; if (ioctl(fd, GET_DISK_INFO, &disk) != 0) @@ -382,12 +393,7 @@ static void add_faulty(struct mddev_dev *dv, int fd, char disp) if ((disk.state & 1) == 0) /* not faulty */ continue; sprintf(buf, "%d:%d", disk.major, disk.minor); - new = xmalloc(sizeof(*new)); - new->devname = xstrdup(buf); - new->disposition = disp; - new->next = dv->next; - dv->next = new; - dv = new; + dv = add_one(dv, buf, disp); } } @@ -403,7 +409,6 @@ static void add_detached(struct mddev_dev *dv, int fd, char disp) remaining_disks = array.nr_disks; for (i = 0; i < MAX_DISKS && remaining_disks > 0; i++) { - struct mddev_dev *new; char buf[40]; int sfd; disk.number = i; @@ -424,12 +429,7 @@ static void add_detached(struct mddev_dev *dv, int fd, char disp) if (errno != ENXIO) /* Probably not detached */ continue; - new = xmalloc(sizeof(*new)); - new->devname = xstrdup(buf); - new->disposition = disp; - new->next = dv->next; - dv->next = new; - dv = new; + dv = add_one(dv, buf, disp); } } diff --git a/config.c b/config.c index 0eb2c8d..798338f 100644 --- a/config.c +++ b/config.c @@ -179,9 +179,9 @@ struct mddev_dev *load_partitions(void) if (!name) continue; d = xmalloc(sizeof(*d)); + memset(d, 0, sizeof(*d)); d->devname = xstrdup(name); d->next = rv; - d->used = 0; rv = d; } fclose(f); @@ -203,12 +203,12 @@ struct mddev_dev *load_containers(void) strncmp(ent->metadata_version, "external:", 9) == 0 && !is_subarray(&ent->metadata_version[9])) { d = xmalloc(sizeof(*d)); + memset(d, 0, sizeof(*d)); if (asprintf(&d->devname, "/dev/%s", ent->dev) < 0) { free(d); continue; } d->next = rv; - d->used = 0; rv = d; } free_mdstat(mdstat); @@ -884,9 +884,9 @@ struct mddev_dev *conf_get_devs() if (flags & GLOB_APPEND) { for (i=0; idevname = xstrdup(globbuf.gl_pathv[i]); t->next = dlist; - t->used = 0; dlist = t; /* printf("one dev is %s\n", t->devname);*/ }