X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=lib%2Fflash%2Fflash.c;h=b7e5b88b95684f737eeaa4366cda298387c046c1;hp=1056c635a4236ce5163ebba3bb0b562ac8bb1f83;hb=c78f9ec47ba92b74698dacdae963dbbefd9b676f;hpb=aaeba8e515e6b3416718b7feac985f01fb948b8f diff --git a/lib/flash/flash.c b/lib/flash/flash.c index 1056c63..b7e5b88 100644 --- a/lib/flash/flash.c +++ b/lib/flash/flash.c @@ -36,7 +36,7 @@ struct flash_info { /* Device information */ struct blocklevel_device *bl; struct ffs_handle *ffs; - uint32_t size; /* raw size of partition */ + uint64_t size; /* raw size of partition */ const char *path; bool ecc; uint32_t erase_granule; @@ -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; + pb_log_fn("Failed to init ffs\n"); + 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 @@ -124,7 +124,7 @@ static struct flash_info *flash_setup_buffer(void *ctx, const char *partition) pb_debug("%s Details\n", partition); pb_debug("\tName\t\t%s\n", info->path); - pb_debug("\tFlash Size\t%u\n", info->size); + pb_debug("\tFlash Size\t%lu\n", info->size); pb_debug("\tGranule\t\t%u\n", info->erase_granule); pb_debug("\tECC\t\t%s\n", info->ecc ? "Protected" : "Unprotected"); pb_debug("\tCurrent Side info:\n"); @@ -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,12 +166,12 @@ 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); if (!buffer) { - pb_log("%s: Failed to init buffer!\n", __func__); + pb_log_fn("Failed to init buffer!\n"); goto out; } @@ -184,7 +187,7 @@ int flash_parse_version(void *ctx, char ***versions, bool current) if (tok) { tmp = talloc_realloc(ctx, tmp, char *, n + 1); if (!tmp) { - pb_log("%s: Failed to allocate memory\n", __func__); + pb_log_fn("Failed to allocate memory\n"); goto out; } tmp[n++] = talloc_strdup(ctx, tok); @@ -195,7 +198,7 @@ int flash_parse_version(void *ctx, char ***versions, bool current) /* Ignore leading tab from subsequent lines */ tmp = talloc_realloc(ctx, tmp, char *, n + 1); if (!tmp) { - pb_log("%s: Failed to reallocate memory\n", __func__); + pb_log_fn("Failed to reallocate memory\n"); n = 0; goto out; }