/* 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;
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
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");
}
return info;
-out:
+out_ffs:
+ ffs_close(info->ffs);
+out_flash:
arch_flash_close(info->bl, NULL);
+out:
talloc_free(info);
return NULL;
}