[U-Boot] [PATCH] Don't wrap to negative after 2G sectors
Stefan Monnier
monnier at iro.umontreal.ca
Wed Sep 9 02:05:46 CEST 2015
Any chance this can make it into 2015.10?
Stefan
>>>>> "Stefan" == Stefan Monnier <monnier at iro.umontreal.ca> writes:
> Signed-off-by: Stefan Monnier <monnier at iro.umontreal.ca>
> ---
> disk/part_dos.c | 29 +++++++++++++++++------------
> include/ide.h | 8 ++++----
> 2 files changed, 21 insertions(+), 16 deletions(-)
> diff --git a/disk/part_dos.c b/disk/part_dos.c
> index cf1a36e..adde68a 100644
> --- a/disk/part_dos.c
> +++ b/disk/part_dos.c
> @@ -25,7 +25,7 @@
> /* Convert char[4] in little endian format to the host format integer
> */
> -static inline int le32_to_int(unsigned char *le32)
> +static inline unsigned int le32_to_int(unsigned char *le32)
> {
> return ((le32[3] << 24) +
> (le32[2] << 16) +
> @@ -46,13 +46,14 @@ static inline int is_bootable(dos_partition_t *p)
> return p->boot_ind == 0x80;
> }
> -static void print_one_part(dos_partition_t *p, int ext_part_sector,
> +static void print_one_part(dos_partition_t *p, lbaint_t ext_part_sector,
> int part_num, unsigned int disksig)
> {
> - int lba_start = ext_part_sector + le32_to_int (p->start4);
> - int lba_size = le32_to_int (p->size4);
> + lbaint_t lba_start = ext_part_sector + le32_to_int (p->start4);
> + lbaint_t lba_size = le32_to_int (p->size4);
> - printf("%3d\t%-10d\t%-10d\t%08x-%02x\t%02x%s%s\n",
> + printf("%3d\t%-10" LBAFlength "u\t%-10" LBAFlength
> + "u\t%08x-%02x\t%02x%s%s\n",
> part_num, lba_start, lba_size, disksig, part_num, p->sys_ind,
> (is_extended(p->sys_ind) ? " Extd" : ""),
> (is_bootable(p) ? " Boot" : ""));
> @@ -101,7 +102,8 @@ int test_part_dos (block_dev_desc_t *dev_desc)
> /* Print a partition that is relative to its Extended partition table
> */
> static void print_partition_extended(block_dev_desc_t *dev_desc,
> - int ext_part_sector, int relative,
> + lbaint_t ext_part_sector,
> + lbaint_t relative,
> int part_num, unsigned int disksig)
> {
> ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
> @@ -109,7 +111,7 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
> int i;
> if (dev_desc->block_read(dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
> - printf ("** Can't read partition table on %d:%d **\n",
> + printf ("** Can't read partition table on %d:" LBAFU " **\n",
dev_desc-> dev, ext_part_sector);
> return;
> }
> @@ -148,7 +150,8 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
> pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);
> for (i = 0; i < 4; i++, pt++) {
> if (is_extended (pt->sys_ind)) {
> - int lba_start = le32_to_int (pt->start4) + relative;
> + lbaint_t lba_start
> + = le32_to_int (pt->start4) + relative;
> print_partition_extended(dev_desc, lba_start,
> ext_part_sector == 0 ? lba_start : relative,
> @@ -162,8 +165,9 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
> /* Print a partition that is relative to its Extended partition table
> */
> -static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part_sector,
> - int relative, int part_num,
> +static int get_partition_info_extended (block_dev_desc_t *dev_desc,
> + lbaint_t ext_part_sector,
> + lbaint_t relative, int part_num,
> int which_part, disk_partition_t *info,
> unsigned int disksig)
> {
> @@ -173,7 +177,7 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
> int dos_type;
> if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
> - printf ("** Can't read partition table on %d:%d **\n",
> + printf ("** Can't read partition table on %d:" LBAFU " **\n",
dev_desc-> dev, ext_part_sector);
> return -1;
> }
> @@ -249,7 +253,8 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
> pt = (dos_partition_t *) (buffer + DOS_PART_TBL_OFFSET);
> for (i = 0; i < 4; i++, pt++) {
> if (is_extended (pt->sys_ind)) {
> - int lba_start = le32_to_int (pt->start4) + relative;
> + lbaint_t lba_start
> + = le32_to_int (pt->start4) + relative;
> return get_partition_info_extended (dev_desc, lba_start,
> ext_part_sector == 0 ? lba_start : relative,
> diff --git a/include/ide.h b/include/ide.h
> index d5e05e9..f9b43cb 100644
> --- a/include/ide.h
> +++ b/include/ide.h
> @@ -28,13 +28,13 @@ void ide_led(uchar led, uchar status);
> #ifdef CONFIG_SYS_64BIT_LBA
> typedef uint64_t lbaint_t;
> -#define LBAF "%llx"
> -#define LBAFU "%llu"
> +#define LBAFlength "ll"
> #else
> typedef ulong lbaint_t;
> -#define LBAF "%lx"
> -#define LBAFU "%lu"
> +#define LBAFlength "l"
> #endif
> +#define LBAF "%" LBAFlength "x"
> +#define LBAFU "%" LBAFlength "u"
> /*
> * Function Prototypes
> --
> 2.1.4
More information about the U-Boot
mailing list