[PATCH] stat.2: fixed inode printing in example program

Konstantin Bukin
2020-09-13T19:41:01Z

inode numbers are expected to be positive. Casting them to a signed type
may result in printing negative values. E.g. running example program on
the following file:

$ ls -li test.txt
9280843260537405888 -r--r--r-- 1 kbukin hardware 300 Jul 21 06:36 test.txt

resutls in the following output:

$ ./example test.txt
ID of containing device: [0,480]
File type: regular file
I-node number: -9165900813172145728
Mode: 100444 (octal)
Link count: 1
Ownership: UID=2743 GID=30
Preferred I/O block size: 32768 bytes
File size: 300 bytes
Blocks allocated: 8
Last status change: Tue Jul 21 06:36:50 2020
Last file access: Sat Sep 12 14:13:38 2020
Last file modification: Tue Jul 21 06:36:50 2020

Such erroneous reporting happens for inode values greater than maximum
value which can be stored in signed long. Printing inode as unsigned
long long fixes the issue.
---
man2/stat.2 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/man2/stat.2 b/man2/stat.2
index 7e5417480..82eaefcda 100644
--- a/man2/stat.2
+++ b/man2/stat.2
@@ -681,7 +681,7 @@ main(int argc, char *argv[])
default: printf("unknown?\en"); break;
}

- printf("I\-node number: %ld\en", (long) sb.st_ino);
+ printf("I\-node number: %llu\en", (unsigned long long) sb.st_ino);

printf("Mode: %lo (octal)\en",
(unsigned long) sb.st_mode);
--
2.17.0