Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 1 | From 3bac4caa2bc64db313aaee54fffb90383e118517 Mon Sep 17 00:00:00 2001 |
| 2 | From: Felix Janda <felix.janda@posteo.de> |
| 3 | Date: Thu, 22 Jan 2015 19:54:36 +0100 |
| 4 | Subject: [PATCH] Remove direct _llseek code and require long filesystem libc. |
| 5 | |
| 6 | Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| 7 | --- |
| 8 | Upstream-Status: Backport |
| 9 | configure.ac | 8 ++++++++ |
| 10 | grub-core/osdep/unix/hostdisk.c | 24 ------------------------ |
| 11 | 4 files changed, 13 insertions(+), 24 deletions(-) |
| 12 | |
| 13 | Index: grub-2.00/configure.ac |
| 14 | =================================================================== |
| 15 | --- grub-2.00.orig/configure.ac |
| 16 | +++ grub-2.00/configure.ac |
| 17 | @@ -306,6 +306,14 @@ if test x$grub_cv_apple_cc = xyes ; then |
| 18 | HOST_LDFLAGS="$HOST_LDFLAGS -Wl,-allow_stack_execute" |
| 19 | fi |
| 20 | |
| 21 | +case "$host_os" in |
| 22 | + cygwin | windows* | mingw32* | aros*) |
| 23 | + ;; |
| 24 | + *) |
| 25 | + AC_CHECK_SIZEOF(off_t) |
| 26 | + test x"$ac_cv_sizeof_off_t" = x8 || AC_MSG_ERROR([Large file support is required]);; |
| 27 | +esac |
| 28 | + |
| 29 | if test x$USE_NLS = xno; then |
| 30 | HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext" |
| 31 | fi |
| 32 | Index: grub-2.00/grub-core/kern/emu/hostdisk.c |
| 33 | =================================================================== |
| 34 | --- grub-2.00.orig/grub-core/kern/emu/hostdisk.c |
| 35 | +++ grub-2.00/grub-core/kern/emu/hostdisk.c |
| 36 | @@ -44,11 +44,6 @@ |
| 37 | #ifdef __linux__ |
| 38 | # include <sys/ioctl.h> /* ioctl */ |
| 39 | # include <sys/mount.h> |
| 40 | -# if !defined(__GLIBC__) || \ |
| 41 | - ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))) |
| 42 | -/* Maybe libc doesn't have large file support. */ |
| 43 | -# include <linux/unistd.h> /* _llseek */ |
| 44 | -# endif /* (GLIBC < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR < 1)) */ |
| 45 | # ifndef BLKFLSBUF |
| 46 | # define BLKFLSBUF _IO (0x12,97) /* flush buffer cache */ |
| 47 | # endif /* ! BLKFLSBUF */ |
| 48 | @@ -761,25 +756,6 @@ linux_find_partition (char *dev, grub_di |
| 49 | } |
| 50 | #endif /* __linux__ */ |
| 51 | |
| 52 | -#if defined(__linux__) && (!defined(__GLIBC__) || \ |
| 53 | - ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))) |
| 54 | - /* Maybe libc doesn't have large file support. */ |
| 55 | -grub_err_t |
| 56 | -grub_util_fd_seek (int fd, const char *name, grub_uint64_t off) |
| 57 | -{ |
| 58 | - loff_t offset, result; |
| 59 | - static int _llseek (uint filedes, ulong hi, ulong lo, |
| 60 | - loff_t *res, uint wh); |
| 61 | - _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, |
| 62 | - loff_t *, res, uint, wh); |
| 63 | - |
| 64 | - offset = (loff_t) off; |
| 65 | - if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET)) |
| 66 | - return grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot seek `%s': %s"), |
| 67 | - name, strerror (errno)); |
| 68 | - return GRUB_ERR_NONE; |
| 69 | -} |
| 70 | -#else |
| 71 | grub_err_t |
| 72 | grub_util_fd_seek (int fd, const char *name, grub_uint64_t off) |
| 73 | { |
| 74 | @@ -790,7 +766,6 @@ grub_util_fd_seek (int fd, const char *n |
| 75 | name, strerror (errno)); |
| 76 | return 0; |
| 77 | } |
| 78 | -#endif |
| 79 | |
| 80 | static void |
| 81 | flush_initial_buffer (const char *os_dev __attribute__ ((unused))) |