diff options
author | Frank Haverkamp <haver@vnet.ibm.com> | 2006-07-10 15:47:05 +0200 |
---|---|---|
committer | Frank Haverkamp <haver@vnet.ibm.com> | 2006-10-31 15:06:07 +0100 |
commit | 02e51e7e0b4c50d900d3a246b2bce73df3a191ee (patch) | |
tree | 42b80dc4a076300cc17f7e9d2f5739470abefab3 /ubi-utils/src/pfi2bin.c | |
parent | c474d44341b1ab9b1b39cf2bbf8686a610b54614 (diff) |
[MTD] UBI: Fixed 16 KiB blocksize problem.
Diffstat (limited to 'ubi-utils/src/pfi2bin.c')
-rw-r--r-- | ubi-utils/src/pfi2bin.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/ubi-utils/src/pfi2bin.c b/ubi-utils/src/pfi2bin.c index 6536c19..4c25faf 100644 --- a/ubi-utils/src/pfi2bin.c +++ b/ubi-utils/src/pfi2bin.c @@ -42,6 +42,8 @@ #include "peb.h" #include "crc32.h" +#define PROGRAM_VERSION "1.2" + #define MAX_FNAME 255 #define DEFAULT_ERASE_COUNT 0 /* Hmmm.... Perhaps */ #define ERR_BUF_SIZE 1024 @@ -71,9 +73,9 @@ static const char copyright [] __attribute__((unused)) = static error_t parse_opt (int key, char *arg, struct argp_state *state); -const char *argp_program_version = PACKAGE_VERSION; +const char *argp_program_version = PROGRAM_VERSION; const char *argp_program_bug_address = PACKAGE_BUGREPORT; -static char doc[] = "\nVersion: " PACKAGE_VERSION "\n\tBuilt on " +static char doc[] = "\nVersion: " PROGRAM_VERSION "\n\tBuilt on " BUILD_CPU" "BUILD_OS" at "__DATE__" "__TIME__"\n" "\n" "pfi2bin - a tool to convert PFI files into binary images.\n"; @@ -355,6 +357,8 @@ write_ubi_volume_table(pdd_data_t pdd, list_t raw_pebs, size_t leb_size, leb_total, j = 0; uint8_t *ptr = NULL; FILE* fp_leb = NULL; + int vt_slots; + size_t vol_tab_size_limit; rc = peb_new(0, 0, &cmp_peb); if (rc != 0) @@ -379,11 +383,21 @@ write_ubi_volume_table(pdd_data_t pdd, list_t raw_pebs, goto err; ubigen_destroy(&u); + /* + * The number of supported volumes is restricted by the eraseblock size + * and by the UBI_MAX_VOLUMES constant. + */ + vt_slots = leb_size / UBI_VTBL_RECORD_SIZE; + if (vt_slots > UBI_MAX_VOLUMES) + vt_slots = UBI_MAX_VOLUMES; + vol_tab_size_limit = vt_slots * UBI_VTBL_RECORD_SIZE; + ptr = (uint8_t*) malloc(leb_size * sizeof(uint8_t)); if (ptr == NULL) goto err; + memset(ptr, 0xff, leb_size); - memcpy(ptr, vol_tab, vol_tab_size); + memcpy(ptr, vol_tab, vol_tab_size_limit); fp_leb = my_fmemopen(ptr, leb_size, "r"); rc = ubigen_create(&u, UBI_LAYOUT_VOL_ID, UBI_VID_DYNAMIC, |