linux: posix_fadvise: support __NR_fadvise64_64
authorMike Frysinger <vapier@gentoo.org>
Thu, 6 Dec 2012 20:01:35 +0000 (15:01 -0500)
committerMike Frysinger <vapier@gentoo.org>
Fri, 7 Dec 2012 01:00:43 +0000 (20:00 -0500)
Some arches do not have a __NR_fadvise64 but do have __NR_fadvise64_64.
If the former is unavailable, fallback to the latter.

Reviewed-by: Carlos O'Donell <carlos@systemhalted.org>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
ChangeLog
sysdeps/unix/sysv/linux/posix_fadvise.c

index 36b2bb0..2dfde80 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-12-06  Carlos O'Donell  <carlos@systemhalted.org>
+           Mike Frysinger  <vapier@gentoo.org>
+
+       * sysdeps/unix/sysv/linux/posix_fadvise.c (posix_fadvise): Also
+       check for __NR_fadvise64_64.
+
 2012-12-06  Chris Metcalf  <cmetcalf@tilera.com>
 
        * sysdeps/generic/fpu_control.h (_FPU_GETCW): Define to set cw to
index cf28faf..064281f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2003-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 int
 posix_fadvise (int fd, off_t offset, off_t len, int advise)
 {
-#ifdef __NR_fadvise64
+#if defined(__NR_fadvise64) || defined(__NR_fadvise64_64)
   INTERNAL_SYSCALL_DECL (err);
+# ifdef __NR_fadvise64
   int ret = INTERNAL_SYSCALL (fadvise64, err, 5, fd,
                              __LONG_LONG_PAIR (offset >> 31, offset), len,
                              advise);
+# else
+  int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd,
+                             __LONG_LONG_PAIR ((long) (offset >> 31),
+                                               (long) offset),
+                             __LONG_LONG_PAIR ((long) (len >> 31),
+                                               (long) len),
+                             advise);
+# endif
   if (INTERNAL_SYSCALL_ERROR_P (ret, err))
     return INTERNAL_SYSCALL_ERRNO (ret, err);
   return 0;