Avoid warning from shifting
authorUlrich Drepper <drepper@gmail.com>
Sat, 12 Nov 2011 06:31:29 +0000 (01:31 -0500)
committerUlrich Drepper <drepper@gmail.com>
Sat, 12 Nov 2011 06:31:29 +0000 (01:31 -0500)
ChangeLog
sysdeps/unix/sysv/linux/internal_statvfs.c

index 897174e..aa29e14 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2011-11-12  Ulrich Drepper  <drepper@gmail.com>
 
+       * sysdeps/unix/sysv/linux/internal_statvfs.c (INTERNAL_STATVFS): Use
+       unsigned long long int to avoid warnings in shift.
+
        * posix/regex_internal.c (re_string_reconstruct): Actually use result
        of use of trans.
        * posix/regex_internal.h (re_string_wchar_at): Remove temporary
index 2ddec1e..a0bad02 100644 (file)
@@ -237,9 +237,13 @@ INTERNAL_STATVFS (const char *name, struct STATVFS *buf,
   buf->f_files = fsbuf->f_files;
   buf->f_ffree = fsbuf->f_ffree;
   if (sizeof (buf->f_fsid) == sizeof (fsbuf->f_fsid))
+    /* The shifting uses 'unsigned long long int' even though the target
+       field might only have 32 bits.  This is OK since the 'if' branch
+       is not used in this case but the compiler would still generate
+       warnings.  */
     buf->f_fsid = ((fsbuf->f_fsid.__val[0]
-                   & ((1UL << (8 * sizeof (fsbuf->f_fsid.__val[0]))) - 1))
-                  | ((unsigned long int) fsbuf->f_fsid.__val[1]
+                   & ((1ULL << (8 * sizeof (fsbuf->f_fsid.__val[0]))) - 1))
+                  | ((unsigned long long int) fsbuf->f_fsid.__val[1]
                      << (8 * (sizeof (buf->f_fsid)
                               - sizeof (fsbuf->f_fsid.__val[0])))));
   else