diff options
author | NeilBrown <neilb@suse.de> | 2010-11-22 20:58:05 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2010-11-22 20:58:05 +1100 |
commit | fa0312397e105afee9c61d2b9c016b3fe6a1178f (patch) | |
tree | b2a6c498d8fd5644eae35ff5fc28f38eec0cdeaf /Assemble.c | |
parent | 2b594614a153a94f2f061c9dfae079986d243ee5 (diff) |
Assemble: change 'skip' label to a variable.
This gets rid of some gotos which makes the code flow a bit
more clear.
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'Assemble.c')
-rw-r--r-- | Assemble.c | 33 |
1 files changed, 17 insertions, 16 deletions
@@ -352,6 +352,7 @@ int Assemble(struct supertype *st, char *mddev, if (tst->ss->container_content && tst->loaded_container) { + int skip = 0; /* tmpdev is a container. We need to be either * looking for a member, or auto-assembling */ @@ -415,32 +416,32 @@ int Assemble(struct supertype *st, char *mddev, fprintf(stderr, Name ": member %s in %s is already assembled\n", content->text_version, devname); - skip: - content = content->next; - if (content) - goto next_member; - tst->ss->free_super(tst); - tst = NULL; - if (auto_assem) - goto loop; - dev_policy_free(pol); - return 1; - } - if (ident->member && ident->member[0]) { + skip = 1; + } else if (ident->member && ident->member[0]) { char *s = strchr(content->text_version+1, '/'); if (s == NULL) { fprintf(stderr, Name ": badly formatted version: %s\n", content->text_version); - goto skip; - } - if (strcmp(ident->member, s+1) != 0) { + skip = 1; + } else if (strcmp(ident->member, s+1) != 0) { if (report_missmatch) fprintf(stderr, Name ": skipping wrong member %s\n", content->text_version); - goto skip; + skip = 1; } } + if (skip) { + content = content->next; + if (content) + goto next_member; + tst->ss->free_super(tst); + tst = NULL; + if (auto_assem) + goto loop; + dev_policy_free(pol); + return 1; + } st = tst; tst = NULL; if (!auto_assem && inargv && tmpdev->next != NULL) { fprintf(stderr, Name ": %s is a container, but is not " |