__nlink_t is 64 bits in stat struct, not 32
authorKevin Klues <klueska@cs.berkeley.edu>
Sat, 17 Jan 2015 18:28:56 +0000 (10:28 -0800)
committerKevin Klues <klueska@cs.berkeley.edu>
Sat, 17 Jan 2015 18:30:17 +0000 (10:30 -0800)
Looking at the changelog, it's been this way since 2000.

From glibc-2.19/Changelog.11
2000-06-16  Jes Sorensen  <jes@linuxcare.com>
    ...
    * sysdeps/unix/sysv/linux/ia64/bits/types.h: Make __ino_t,
    __nlink_t and __blkcnt_t 64 bit to accomodate new kernel stat data
    structure.
    ...

My hunch is that things got reorganized such that previously the
default typedef for __nlink_t was 32 bits, while a linux specific one
was 64 bit.  It appears they have now made the default one 64 bit as
well.

kern/include/sys/types.h

index 1b260fe..42bc0f1 100644 (file)
@@ -10,7 +10,7 @@
 typedef uint64_t __dev_t;
 typedef uint64_t __ino64_t;
 typedef uint32_t __mode_t;
-typedef uint32_t __nlink_t;
+typedef uint64_t __nlink_t;
 typedef uint32_t __uid_t;
 typedef uint32_t __gid_t;
 typedef int64_t __off64_t;