diff -ur tst/grub2-1.95+20070604/include/grub/types.h grub2-1.95+20070604/include/grub/types.h --- tst/grub2-1.95+20070604/include/grub/types.h 2006-11-09 14:39:51.000000000 -0500 +++ grub2-1.95+20070604/include/grub/types.h 2007-11-05 06:27:11.000000000 -0500 @@ -57,8 +57,10 @@ typedef int grub_int32_t; #if GRUB_CPU_SIZEOF_VOID_P == 8 typedef long grub_int64_t; +#define ULONG_MAX ULONG_MAX64 #else typedef long long grub_int64_t; +#define ULONG_MAX ULONG_MAX32 #endif typedef unsigned char grub_uint8_t; @@ -93,6 +95,10 @@ typedef grub_int32_t grub_ssize_t; #endif +#define ULONG_MAX32 4294967295UL +#define ULONG_MAX64 18446744073709551615UL + + /* The type for representing a file offset. */ typedef grub_uint64_t grub_off_t; diff -ur tst/grub2-1.95+20070604/util/biosdisk.c grub2-1.95+20070604/util/biosdisk.c --- tst/grub2-1.95+20070604/util/biosdisk.c 2007-06-04 14:58:17.000000000 -0400 +++ grub2-1.95+20070604/util/biosdisk.c 2007-11-05 06:06:10.000000000 -0500 @@ -739,6 +739,9 @@ if (pcdata) { + if (disk->total_sectors > ULONG_MAX32) + grub_util_warn ("Size of disk exceeds maximum permitted by partition map"); + if (pcdata->bsd_part < 0) grub_util_info ("DOS partition %d starts from %lu", pcdata->dos_part, partition->start); +++ grub2.bigdisk/util/misc.c 2007-11-05 16:06:37.000000000 +0100 @@ -58,6 +58,19 @@ } void +grub_util_warn (const char *fmt, ...) +{ + va_list ap; + + fprintf (stderr, "%s: warning: ", progname); + va_start (ap, fmt); + vfprintf (stderr, fmt, ap); + va_end (ap); + fputc ('\n', stderr); + fflush (stderr); +} + +void grub_util_error (const char *fmt, ...) { va_list ap;