OSDN Git Service

Avoid warnings about shifting more bits than we have
authorRon <ron@debian.org>
Fri, 26 Jun 2009 19:14:27 +0000 (04:44 +0930)
committerMike Frysinger <vapier@gentoo.org>
Mon, 6 Jul 2009 00:27:17 +0000 (20:27 -0400)
The test here is a constant expression and will compile out.
For platforms that don't need the shift the code gets slightly smaller
and simpler, for those that do the result is unchanged.

Signed-off-by: Ron Lee <ron@debian.org>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
libc/sysdeps/linux/arm/posix_fadvise.c

index b23eb3d..278bff9 100644 (file)
@@ -12,6 +12,8 @@
 
 #if defined __NR_arm_fadvise64_64
 
+#define HIGH_BITS(x) (sizeof(x) > 4 ? (x) >> 32 : 0)
+
 /* Was named __libc_posix_fadvise for some inexplicable reason.
 ** google says only uclibc has *__libc*_posix_fadviseXXX,
 ** so it cannot be compat with anything.
@@ -27,8 +29,8 @@ int posix_fadvise(int fd, off_t offset, off_t len, int advise)
 {
   INTERNAL_SYSCALL_DECL (err);
   int ret = INTERNAL_SYSCALL (arm_fadvise64_64, err, 6, fd, advise,
-                              __LONG_LONG_PAIR ((long)(offset >> 32), (long)offset),
-                              __LONG_LONG_PAIR ((long)(len >> 32), (long)len));
+                              __LONG_LONG_PAIR (HIGH_BITS(offset), (long)offset),
+                              __LONG_LONG_PAIR (HIGH_BITS(len), (long)len));
 
     if (INTERNAL_SYSCALL_ERROR_P (ret, err))
       return INTERNAL_SYSCALL_ERRNO (ret, err);