From ca145a1e4c9ec2c95f95f6283a3ce290f3d4da0d Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Mon, 22 Nov 2010 19:35:25 +1100 Subject: mapinfo: simplify subarray handling. We don't need ->container_dev here, and we will soon be passing subarray as an explicit arg to load_super. So simplify extraction of subarray and move the strcpy close to ->load_super. Signed-off-by: NeilBrown --- mapfile.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/mapfile.c b/mapfile.c index b22772c..2645aa9 100644 --- a/mapfile.c +++ b/mapfile.c @@ -334,31 +334,20 @@ struct map_ent *map_by_name(struct map_ent **map, char *name) * version super_by_fd does this automatically, this routine is meant as * a supplement for guess_super() */ -static void set_member_info(struct supertype *st, struct mdstat_ent *ent) +static char *get_member_info(struct mdstat_ent *ent) { - st->subarray[0] = '\0'; - if (ent->metadata_version == NULL || strncmp(ent->metadata_version, "external:", 9) != 0) - return; + return NULL; if (is_subarray(&ent->metadata_version[9])) { - char version[strlen(ent->metadata_version)+1]; char *subarray; - char *name = &version[10]; - - strcpy(version, ent->metadata_version); - subarray = strrchr(version, '/'); - name = &version[10]; - if (!subarray) - return; - *subarray++ = '\0'; - - st->container_dev = devname2devnum(name); - strncpy(st->subarray, subarray, sizeof(st->subarray)); + subarray = strrchr(ent->metadata_version, '/'); + return subarray + 1; } + return NULL; } void RebuildMap(void) @@ -402,7 +391,8 @@ void RebuildMap(void) if ( st == NULL) ok = -1; else { - set_member_info(st, md); + char *subarray = get_member_info(md); + strcpy(st->subarray, subarray); ok = st->ss->load_super(st, dfd, NULL); } close(dfd); -- cgit v1.2.1