]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
vfs: de-crapify "cp_new_stat()" function
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 7 May 2012 00:47:30 +0000 (17:47 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 7 May 2012 00:47:30 +0000 (17:47 -0700)
It's an unreadable mess of 32-bit vs 64-bit #ifdef's that mostly follow
a rather simple pattern.

Make a helper #define to handle that pattern, in the process making the
code both shorter and more readable.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/stat.c

index c733dc5753aea129a1e5deb76bf48d0cb640d6e3..2b5d55eb9d9a3048acab8963ec1c1acd365f6f02 100644 (file)
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -190,24 +190,28 @@ SYSCALL_DEFINE2(fstat, unsigned int, fd, struct __old_kernel_stat __user *, stat
 
 #endif /* __ARCH_WANT_OLD_STAT */
 
+#if BITS_PER_LONG == 32
+#  define choose_32_64(a,b) a
+#else
+#  define choose_32_64(a,b) b
+#endif
+
+#define valid_dev(x)  choose_32_64(old_valid_dev,new_valid_dev)(x)
+#define encode_dev(x) choose_32_64(old_encode_dev,new_encode_dev)(x)
+
 static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf)
 {
        struct stat tmp;
 
-#if BITS_PER_LONG == 32
-       if (!old_valid_dev(stat->dev) || !old_valid_dev(stat->rdev))
+       if (!valid_dev(stat->dev) || !valid_dev(stat->rdev))
                return -EOVERFLOW;
-#else
-       if (!new_valid_dev(stat->dev) || !new_valid_dev(stat->rdev))
+#if BITS_PER_LONG == 32
+       if (stat->size > MAX_NON_LFS)
                return -EOVERFLOW;
 #endif
 
        memset(&tmp, 0, sizeof(tmp));
-#if BITS_PER_LONG == 32
-       tmp.st_dev = old_encode_dev(stat->dev);
-#else
-       tmp.st_dev = new_encode_dev(stat->dev);
-#endif
+       tmp.st_dev = encode_dev(stat->dev);
        tmp.st_ino = stat->ino;
        if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino)
                return -EOVERFLOW;
@@ -217,15 +221,7 @@ static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf)
                return -EOVERFLOW;
        SET_UID(tmp.st_uid, stat->uid);
        SET_GID(tmp.st_gid, stat->gid);
-#if BITS_PER_LONG == 32
-       tmp.st_rdev = old_encode_dev(stat->rdev);
-#else
-       tmp.st_rdev = new_encode_dev(stat->rdev);
-#endif
-#if BITS_PER_LONG == 32
-       if (stat->size > MAX_NON_LFS)
-               return -EOVERFLOW;
-#endif 
+       tmp.st_rdev = encode_dev(stat->rdev);
        tmp.st_size = stat->size;
        tmp.st_atime = stat->atime.tv_sec;
        tmp.st_mtime = stat->mtime.tv_sec;