summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/unix/sysv/linux/internal_statvfs.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sysdeps/unix/sysv/linux/internal_statvfs.c b/sysdeps/unix/sysv/linux/internal_statvfs.c
index 2ddec1edba..a0bad02d79 100644
--- a/sysdeps/unix/sysv/linux/internal_statvfs.c
+++ b/sysdeps/unix/sysv/linux/internal_statvfs.c
@@ -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