From de4fa71c6c61d78a0816da81e0c0806185a174f1 Mon Sep 17 00:00:00 2001 From: robertmh Date: Wed, 29 Oct 2008 19:24:11 +0000 Subject: [PATCH] 2008-10-29 Guillem Jover * disk/lvm.c (grub_lvm_scan_device): Fix error recovery by delaying the addition of objects until the code is not going to be able to fail. --- ChangeLog | 5 +++++ disk/lvm.c | 22 ++++++++++++---------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 98aefe434..430a37b78 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-10-29 Guillem Jover + + * disk/lvm.c (grub_lvm_scan_device): Fix error recovery by delaying the + addition of objects until the code is not going to be able to fail. + 2008-10-29 Guillem Jover * disk/lvm.c (grub_lvm_scan_device): Fix possible NULL value handling diff --git a/disk/lvm.c b/disk/lvm.c index 0b35aa9ad..6ebde636f 100644 --- a/disk/lvm.c +++ b/disk/lvm.c @@ -356,8 +356,6 @@ grub_lvm_scan_device (const char *name) vg->lvs = NULL; vg->pvs = NULL; - vg->next = vg_list; - vg_list = vg; p = grub_strstr (p, "physical_volumes {"); if (p) @@ -395,14 +393,15 @@ grub_lvm_scan_device (const char *name) pv->start = grub_lvm_getvalue (&p, "pe_start = "); if (p == NULL) goto pvs_fail; - pv->disk = NULL; - pv->next = vg->pvs; - vg->pvs = pv; p = grub_strchr (p, '}'); if (p == NULL) goto pvs_fail; p++; + + pv->disk = NULL; + pv->next = vg->pvs; + vg->pvs = pv; continue; pvs_fail: @@ -531,16 +530,16 @@ grub_lvm_scan_device (const char *name) goto fail4; } - lv->number = lv_count++; - lv->vg = vg; - lv->next = vg->lvs; - vg->lvs = lv; - p = grub_strchr (p, '}'); if (p == NULL) goto lvs_fail; p += 3; + lv->number = lv_count++; + lv->vg = vg; + lv->next = vg->lvs; + vg->lvs = lv; + continue; lvs_fail: grub_free (lv->name); @@ -548,6 +547,9 @@ grub_lvm_scan_device (const char *name) goto fail4; } } + + vg->next = vg_list; + vg_list = vg; } else {