summaryrefslogtreecommitdiff
path: root/Assemble.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2010-11-22 20:58:05 +1100
committerNeilBrown <neilb@suse.de>2010-11-22 20:58:05 +1100
commitfa0312397e105afee9c61d2b9c016b3fe6a1178f (patch)
treeb2a6c498d8fd5644eae35ff5fc28f38eec0cdeaf /Assemble.c
parent2b594614a153a94f2f061c9dfae079986d243ee5 (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.c33
1 files changed, 17 insertions, 16 deletions
diff --git a/Assemble.c b/Assemble.c
index 4b9b4089..6602a090 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -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 "