X-Git-Url: https://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=lib%2Fflash%2Fflash.c;h=1384118a59ec0e87befbf3e6f558032f6591b669;hp=1056c635a4236ce5163ebba3bb0b562ac8bb1f83;hb=87fa4885310b6c6b79e31d79d192ba9ea90cf236;hpb=aaeba8e515e6b3416718b7feac985f01fb948b8f diff --git a/lib/flash/flash.c b/lib/flash/flash.c index 1056c63..1384118 100644 --- a/lib/flash/flash.c +++ b/lib/flash/flash.c @@ -82,26 +82,26 @@ static struct flash_info *flash_setup_buffer(void *ctx, const char *partition) rc = arch_flash_init(&info->bl, NULL, true); if (rc) { pb_log("Failed to init mtd device\n"); - return NULL; + goto out; } rc = blocklevel_get_info(info->bl, &info->path, &info->size, &info->erase_granule); if (rc) { pb_log("Failed to retrieve blocklevel info\n"); - return NULL; + goto out_flash; } rc = ffs_init(0, info->size, info->bl, &info->ffs, 1); if (rc) { pb_log("%s: Failed to init ffs\n", __func__); - goto out; + goto out_flash; } rc = partition_info(info, partition); if (rc) { pb_log("Failed to retrieve partition info\n"); - goto out; + goto out_ffs; } /* Check if there is a second flash side. If there is not, or @@ -139,8 +139,11 @@ static struct flash_info *flash_setup_buffer(void *ctx, const char *partition) } return info; -out: +out_ffs: + ffs_close(info->ffs); +out_flash: arch_flash_close(info->bl, NULL); +out: talloc_free(info); return NULL; } @@ -163,7 +166,7 @@ int flash_parse_version(void *ctx, char ***versions, bool current) if (!current && !info->other_side) return 0; - cur_info = current ? info->other_side : info; + cur_info = !current ? info->other_side : info; len = cur_info->attr_data_len - ecc_size(cur_info->attr_data_len); buffer = talloc_array(cur_info, char, len);