--- a/grub/asmstub.c +++ b/grub/asmstub.c @@ -1037,7 +1037,7 @@ hex_dump (void *buf, size_t size) int biosdisk (int subfunc, int drive, struct geometry *geometry, - unsigned int sector, int nsec, int segment) + int sector, int nsec, int segment) { char *buf; int fd = geometry->flags; --- a/lib/device.c +++ b/lib/device.c @@ -69,9 +69,9 @@ struct hd_geometry # ifndef CDROM_GET_CAPABILITY # define CDROM_GET_CAPABILITY 0x5331 /* get capabilities */ # endif /* ! CDROM_GET_CAPABILITY */ -# ifndef BLKGETSIZE64 -# define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size */ -# endif /* ! BLKGETSIZE64 */ +# ifndef BLKGETSIZE +# define BLKGETSIZE _IO(0x12,96) /* return device size */ +# endif /* ! BLKGETSIZE */ #endif /* __linux__ */ /* Use __FreeBSD_kernel__ instead of __FreeBSD__ for compatibility with @@ -297,16 +297,16 @@ get_drive_geometry (struct geometry *geom, char **map, int drive) #if defined(__linux__) /* Linux */ { - unsigned long long nr; + unsigned long nr; - if (ioctl (fd, BLKGETSIZE64, &nr)) + if (ioctl (fd, BLKGETSIZE, &nr)) goto fail; /* Got the geometry, so save it. */ get_linux_geometry(fd, geom); if (!geom->heads && !geom->cylinders && !geom->sectors) goto fail; - geom->total_sectors = nr / 512; + geom->total_sectors = nr; goto success; } --- a/stage2/bios.c +++ b/stage2/bios.c @@ -47,7 +47,7 @@ extern int get_diskinfo_floppy (int drive, return the error number. Otherwise, return 0. */ int biosdisk (int read, int drive, struct geometry *geometry, - unsigned int sector, int nsec, int segment) + int sector, int nsec, int segment) { int err; --- a/stage2/disk_io.c +++ b/stage2/disk_io.c @@ -138,7 +138,7 @@ log2 (unsigned long word) } int -rawread (int drive, unsigned int sector, int byte_offset, int byte_len, char *buf) +rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) { int slen, sectors_per_vtrack; int sector_size_bits = log2 (buf_geom.sector_size); @@ -262,7 +262,7 @@ rawread (int drive, unsigned int sector, int byte_offset, int byte_len, char *bu */ if (disk_read_func) { - unsigned int sector_num = sector; + int sector_num = sector; int length = buf_geom.sector_size - byte_offset; if (length > size) length = size; @@ -292,7 +292,7 @@ rawread (int drive, unsigned int sector, int byte_offset, int byte_len, char *bu int -devread (unsigned int sector, int byte_offset, int byte_len, char *buf) +devread (int sector, int byte_offset, int byte_len, char *buf) { /* * Check partition boundaries @@ -331,7 +331,7 @@ devread (unsigned int sector, int byte_offset, int byte_len, char *buf) #ifndef STAGE1_5 int -rawwrite (int drive, unsigned int sector, char *buf) +rawwrite (int drive, int sector, char *buf) { if (sector == 0) { @@ -364,7 +364,7 @@ rawwrite (int drive, unsigned int sector, char *buf) } int -devwrite (unsigned int sector, int sector_count, char *buf) +devwrite (int sector, int sector_count, char *buf) { #if defined(GRUB_UTIL) && defined(__linux__) if (current_partition != 0xFFFFFF --- a/stage2/shared.h +++ b/stage2/shared.h @@ -813,7 +813,7 @@ int checkkey (void); /* Low-level disk I/O */ int get_diskinfo (int drive, struct geometry *geometry); int biosdisk (int subfunc, int drive, struct geometry *geometry, - unsigned int sector, int nsec, int segment); + int sector, int nsec, int segment); void stop_floppy (void); /* Command-line interface functions. */ @@ -927,10 +927,10 @@ int gunzip_test_header (void); int gunzip_read (char *buf, int len); #endif /* NO_DECOMPRESSION */ -int rawread (int drive, unsigned int sector, int byte_offset, int byte_len, char *buf); -int devread (unsigned int sector, int byte_offset, int byte_len, char *buf); -int rawwrite (int drive, unsigned int sector, char *buf); -int devwrite (unsigned int sector, int sector_len, char *buf); +int rawread (int drive, int sector, int byte_offset, int byte_len, char *buf); +int devread (int sector, int byte_offset, int byte_len, char *buf); +int rawwrite (int drive, int sector, char *buf); +int devwrite (int sector, int sector_len, char *buf); /* Parse a device string and initialize the global parameters. */ char *set_device (char *device);