[git commit master] stat: get rid on intmax_t

Denys Vlasenko vda.linux at googlemail.com
Tue Feb 2 02:08:57 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=5b9b1365a086056e992e7868db8e49989fedcbaf
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
print_it                                             225     218      -7
print_stat                                           919     889     -30
print_statfs                                         370     339     -31
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-68)             Total: -68 bytes

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 coreutils/stat.c   |  181 ++++++++++++++++++++++++++--------------------------
 include/libbb.h    |    1 +
 include/platform.h |   16 +----
 3 files changed, 93 insertions(+), 105 deletions(-)

diff --git a/coreutils/stat.c b/coreutils/stat.c
index bbd2e6a..57f1f14 100644
--- a/coreutils/stat.c
+++ b/coreutils/stat.c
@@ -12,10 +12,8 @@
  *
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
-
 #include "libbb.h"
 
-/* vars to control behavior */
 #define OPT_FILESYS     (1 << 0)
 #define OPT_TERSE       (1 << 1)
 #define OPT_DEREFERENCE (1 << 2)
@@ -154,7 +152,7 @@ static void printfs(char *pformat, const char *msg)
 }
 
 /* print statfs info */
-static void print_statfs(char *pformat, const char m,
+static void FAST_FUNC print_statfs(char *pformat, const char m,
 		const char *const filename, const void *data
 		IF_SELINUX(, security_context_t scontext))
 {
@@ -166,34 +164,34 @@ static void print_statfs(char *pformat, const char m,
 		printf(pformat, get_f_fsid(statfsbuf));
 	} else if (m == 'l') {
 		strcat(pformat, "lu");
-		printf(pformat, (unsigned long) (statfsbuf->f_namelen));
+		printf(pformat, (unsigned long) statfsbuf->f_namelen);
 	} else if (m == 't') {
 		strcat(pformat, "lx");
-		printf(pformat, (unsigned long) (statfsbuf->f_type)); /* no equiv */
+		printf(pformat, (unsigned long) statfsbuf->f_type); /* no equiv */
 	} else if (m == 'T') {
 		printfs(pformat, human_fstype(statfsbuf->f_type));
 	} else if (m == 'b') {
-		strcat(pformat, "jd");
-		printf(pformat, (intmax_t) (statfsbuf->f_blocks));
+		strcat(pformat, "llu");
+		printf(pformat, (unsigned long long) statfsbuf->f_blocks);
 	} else if (m == 'f') {
-		strcat(pformat, "jd");
-		printf(pformat, (intmax_t) (statfsbuf->f_bfree));
+		strcat(pformat, "llu");
+		printf(pformat, (unsigned long long) statfsbuf->f_bfree);
 	} else if (m == 'a') {
-		strcat(pformat, "jd");
-		printf(pformat, (intmax_t) (statfsbuf->f_bavail));
+		strcat(pformat, "llu");
+		printf(pformat, (unsigned long long) statfsbuf->f_bavail);
 	} else if (m == 's' || m == 'S') {
 		strcat(pformat, "lu");
-		printf(pformat, (unsigned long) (statfsbuf->f_bsize));
+		printf(pformat, (unsigned long) statfsbuf->f_bsize);
 	} else if (m == 'c') {
-		strcat(pformat, "jd");
-		printf(pformat, (intmax_t) (statfsbuf->f_files));
+		strcat(pformat, "llu");
+		printf(pformat, (unsigned long long) statfsbuf->f_files);
 	} else if (m == 'd') {
-		strcat(pformat, "jd");
-		printf(pformat, (intmax_t) (statfsbuf->f_ffree));
-#if ENABLE_SELINUX
+		strcat(pformat, "llu");
+		printf(pformat, (unsigned long long) statfsbuf->f_ffree);
+# if ENABLE_SELINUX
 	} else if (m == 'C' && (option_mask32 & OPT_SELINUX)) {
 		printfs(pformat, scontext);
-#endif
+# endif
 	} else {
 		strcatc(pformat, 'c');
 		printf(pformat, m);
@@ -201,7 +199,7 @@ static void print_statfs(char *pformat, const char m,
 }
 
 /* print stat info */
-static void print_stat(char *pformat, const char m,
+static void FAST_FUNC print_stat(char *pformat, const char m,
 		const char *const filename, const void *data
 		IF_SELINUX(, security_context_t scontext))
 {
@@ -227,14 +225,14 @@ static void print_stat(char *pformat, const char m,
 			printf(pformat, filename);
 		}
 	} else if (m == 'd') {
-		strcat(pformat, "ju");
-		printf(pformat, (uintmax_t) statbuf->st_dev);
+		strcat(pformat, "llu");
+		printf(pformat, (unsigned long long) statbuf->st_dev);
 	} else if (m == 'D') {
-		strcat(pformat, "jx");
-		printf(pformat, (uintmax_t) statbuf->st_dev);
+		strcat(pformat, "llx");
+		printf(pformat, (unsigned long long) statbuf->st_dev);
 	} else if (m == 'i') {
-		strcat(pformat, "ju");
-		printf(pformat, (uintmax_t) statbuf->st_ino);
+		strcat(pformat, "llu");
+		printf(pformat, (unsigned long long) statbuf->st_ino);
 	} else if (m == 'a') {
 		strcat(pformat, "lo");
 		printf(pformat, (unsigned long) (statbuf->st_mode & (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)));
@@ -269,14 +267,14 @@ static void print_stat(char *pformat, const char m,
 		strcat(pformat, "lx");
 		printf(pformat, (unsigned long) minor(statbuf->st_rdev));
 	} else if (m == 's') {
-		strcat(pformat, "ju");
-		printf(pformat, (uintmax_t) (statbuf->st_size));
+		strcat(pformat, "llu");
+		printf(pformat, (unsigned long long) statbuf->st_size);
 	} else if (m == 'B') {
 		strcat(pformat, "lu");
 		printf(pformat, (unsigned long) 512); //ST_NBLOCKSIZE
 	} else if (m == 'b') {
-		strcat(pformat, "ju");
-		printf(pformat, (uintmax_t) statbuf->st_blocks);
+		strcat(pformat, "llu");
+		printf(pformat, (unsigned long long) statbuf->st_blocks);
 	} else if (m == 'o') {
 		strcat(pformat, "lu");
 		printf(pformat, (unsigned long) statbuf->st_blksize);
@@ -284,31 +282,34 @@ static void print_stat(char *pformat, const char m,
 		printfs(pformat, human_time(statbuf->st_atime));
 	} else if (m == 'X') {
 		strcat(pformat, TYPE_SIGNED(time_t) ? "ld" : "lu");
-		printf(pformat, (unsigned long) statbuf->st_atime);
+		/* note: (unsigned long) would be wrong:
+		 * imagine (unsigned long64)int32 */
+		printf(pformat, (long) statbuf->st_atime);
 	} else if (m == 'y') {
 		printfs(pformat, human_time(statbuf->st_mtime));
 	} else if (m == 'Y') {
 		strcat(pformat, TYPE_SIGNED(time_t) ? "ld" : "lu");
-		printf(pformat, (unsigned long) statbuf->st_mtime);
+		printf(pformat, (long) statbuf->st_mtime);
 	} else if (m == 'z') {
 		printfs(pformat, human_time(statbuf->st_ctime));
 	} else if (m == 'Z') {
 		strcat(pformat, TYPE_SIGNED(time_t) ? "ld" : "lu");
-		printf(pformat, (unsigned long) statbuf->st_ctime);
-#if ENABLE_SELINUX
+		printf(pformat, (long) statbuf->st_ctime);
+# if ENABLE_SELINUX
 	} else if (m == 'C' && (option_mask32 & OPT_SELINUX)) {
 		printfs(pformat, scontext);
-#endif
+# endif
 	} else {
 		strcatc(pformat, 'c');
 		printf(pformat, m);
 	}
 }
 
-static void print_it(const char *masterformat, const char *filename,
-		void (*print_func) (char*, char, const char*, const void* IF_SELINUX(, security_context_t scontext)),
+static void print_it(const char *masterformat,
+		const char *filename,
+		void FAST_FUNC (*print_func)(char*, char, const char*, const void* IF_SELINUX(, security_context_t scontext)),
 		const void *data
-		IF_SELINUX(, security_context_t scontext) )
+		IF_SELINUX(, security_context_t scontext))
 {
 	/* Create a working copy of the format string */
 	char *format = xstrdup(masterformat);
@@ -355,7 +356,7 @@ static void print_it(const char *masterformat, const char *filename,
 	free(format);
 	free(dest);
 }
-#endif
+#endif  /* FEATURE_STAT_FORMAT */
 
 /* Stat the file system and print what we find.  */
 #if !ENABLE_FEATURE_STAT_FORMAT
@@ -364,7 +365,6 @@ static void print_it(const char *masterformat, const char *filename,
 static bool do_statfs(const char *filename, const char *format)
 {
 	struct statfs statfsbuf;
-
 #if !ENABLE_FEATURE_STAT_FORMAT
 	const char *format;
 #endif
@@ -389,7 +389,7 @@ static bool do_statfs(const char *filename, const char *format)
 
 #if ENABLE_FEATURE_STAT_FORMAT
 	if (format == NULL) {
-#if !ENABLE_SELINUX
+# if !ENABLE_SELINUX
 		format = (option_mask32 & OPT_TERSE
 			? "%n %i %l %t %s %b %f %a %c %d\n"
 			: "  File: \"%n\"\n"
@@ -397,7 +397,7 @@ static bool do_statfs(const char *filename, const char *format)
 			  "Block size: %-10s\n"
 			  "Blocks: Total: %-10b Free: %-10f Available: %a\n"
 			  "Inodes: Total: %-10c Free: %d");
-#else
+# else
 		format = (option_mask32 & OPT_TERSE
 			? (option_mask32 & OPT_SELINUX ? "%n %i %l %t %s %b %f %a %c %d %C\n":
 			"%n %i %l %t %s %b %f %a %c %d\n")
@@ -414,7 +414,7 @@ static bool do_statfs(const char *filename, const char *format)
 			"Blocks: Total: %-10b Free: %-10f Available: %a\n"
 			"Inodes: Total: %-10c Free: %d\n")
 			);
-#endif /* SELINUX */
+# endif /* SELINUX */
 	}
 	print_it(format, filename, print_statfs, &statfsbuf IF_SELINUX(, scontext));
 #else /* FEATURE_STAT_FORMAT */
@@ -428,47 +428,48 @@ static bool do_statfs(const char *filename, const char *format)
 	       statfsbuf.f_namelen);
 
 	if (option_mask32 & OPT_TERSE)
-		printf("%lx ", (unsigned long) (statfsbuf.f_type));
+		printf("%lx ", (unsigned long) statfsbuf.f_type);
 	else
 		printf("Type: %s\n", human_fstype(statfsbuf.f_type));
 
-#if !ENABLE_SELINUX
+# if !ENABLE_SELINUX
 	format = (option_mask32 & OPT_TERSE
-		? "%lu %ld %ld %ld %ld %ld\n"
+		? "%lu %llu %llu %llu %llu %llu\n"
 		: "Block size: %-10lu\n"
-		  "Blocks: Total: %-10jd Free: %-10jd Available: %jd\n"
-		  "Inodes: Total: %-10jd Free: %jd\n");
+		  "Blocks: Total: %-10llu Free: %-10llu Available: %llu\n"
+		  "Inodes: Total: %-10llu Free: %llu\n");
 	printf(format,
-	       (unsigned long) (statfsbuf.f_bsize),
-	       (intmax_t) (statfsbuf.f_blocks),
-	       (intmax_t) (statfsbuf.f_bfree),
-	       (intmax_t) (statfsbuf.f_bavail),
-	       (intmax_t) (statfsbuf.f_files),
-	       (intmax_t) (statfsbuf.f_ffree));
-#else
+	       (unsigned long) statfsbuf.f_bsize,
+	       (unsigned long long) statfsbuf.f_blocks,
+	       (unsigned long long) statfsbuf.f_bfree,
+	       (unsigned long long) statfsbuf.f_bavail,
+	       (unsigned long long) statfsbuf.f_files,
+	       (unsigned long long) statfsbuf.f_ffree);
+# else
 	format = (option_mask32 & OPT_TERSE
-		? (option_mask32 & OPT_SELINUX ? "%lu %ld %ld %ld %ld %ld %C\n":
-		"%lu %ld %ld %ld %ld %ld\n")
-		: (option_mask32 & OPT_SELINUX ?
-		"Block size: %-10lu\n"
-		"Blocks: Total: %-10jd Free: %-10jd Available: %jd\n"
-		"Inodes: Total: %-10jd Free: %jd"
-		"S_context: %C\n":
-		"Block size: %-10lu\n"
-		"Blocks: Total: %-10jd Free: %-10jd Available: %jd\n"
-		"Inodes: Total: %-10jd Free: %jd\n"));
+		? (option_mask32 & OPT_SELINUX ? "%lu %llu %llu %llu %llu %llu %C\n" : "%lu %llu %llu %llu %llu %llu\n")
+		: (option_mask32 & OPT_SELINUX
+			?	"Block size: %-10lu\n"
+				"Blocks: Total: %-10llu Free: %-10llu Available: %llu\n"
+				"Inodes: Total: %-10llu Free: %llu"
+				"S_context: %C\n"
+			:	"Block size: %-10lu\n"
+				"Blocks: Total: %-10llu Free: %-10llu Available: %llu\n"
+				"Inodes: Total: %-10llu Free: %llu\n"
+			)
+		);
 	printf(format,
-	       (unsigned long) (statfsbuf.f_bsize),
-	       (intmax_t) (statfsbuf.f_blocks),
-	       (intmax_t) (statfsbuf.f_bfree),
-	       (intmax_t) (statfsbuf.f_bavail),
-	       (intmax_t) (statfsbuf.f_files),
-	       (intmax_t) (statfsbuf.f_ffree),
+		(unsigned long) statfsbuf.f_bsize,
+		(unsigned long long) statfsbuf.f_blocks,
+		(unsigned long long) statfsbuf.f_bfree,
+		(unsigned long long) statfsbuf.f_bavail,
+		(unsigned long long) statfsbuf.f_files,
+		(unsigned long long) statfsbuf.f_ffree,
 		scontext);
 
 	if (scontext)
 		freecon(scontext);
-#endif
+# endif
 #endif	/* FEATURE_STAT_FORMAT */
 	return 1;
 }
@@ -501,7 +502,7 @@ static bool do_stat(const char *filename, const char *format)
 
 #if ENABLE_FEATURE_STAT_FORMAT
 	if (format == NULL) {
-#if !ENABLE_SELINUX
+# if !ENABLE_SELINUX
 		if (option_mask32 & OPT_TERSE) {
 			format = "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o";
 		} else {
@@ -522,7 +523,7 @@ static bool do_stat(const char *filename, const char *format)
 					"Access: %x\n" "Modify: %y\n" "Change: %z\n";
 			}
 		}
-#else
+# else
 		if (option_mask32 & OPT_TERSE) {
 			format = (option_mask32 & OPT_SELINUX ?
 				  "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o %C\n":
@@ -558,21 +559,21 @@ static bool do_stat(const char *filename, const char *format)
 					  "Access: %x\n" "Modify: %y\n" "Change: %z\n");
 			}
 		}
-#endif
+# endif
 	}
 	print_it(format, filename, print_stat, &statbuf IF_SELINUX(, scontext));
 #else	/* FEATURE_STAT_FORMAT */
 	if (option_mask32 & OPT_TERSE) {
-		printf("%s %ju %ju %lx %lu %lu %jx %ju %lu %lx %lx %lu %lu %lu %lu"
+		printf("%s %llu %llu %lx %lu %lu %llx %llu %lu %lx %lx %lu %lu %lu %lu"
 		       IF_NOT_SELINUX("\n"),
 		       filename,
-		       (uintmax_t) (statbuf.st_size),
-		       (uintmax_t) statbuf.st_blocks,
+		       (unsigned long long) statbuf.st_size,
+		       (unsigned long long) statbuf.st_blocks,
 		       (unsigned long) statbuf.st_mode,
 		       (unsigned long) statbuf.st_uid,
 		       (unsigned long) statbuf.st_gid,
-		       (uintmax_t) statbuf.st_dev,
-		       (uintmax_t) statbuf.st_ino,
+		       (unsigned long long) statbuf.st_dev,
+		       (unsigned long long) statbuf.st_ino,
 		       (unsigned long) statbuf.st_nlink,
 		       (unsigned long) major(statbuf.st_rdev),
 		       (unsigned long) minor(statbuf.st_rdev),
@@ -581,12 +582,12 @@ static bool do_stat(const char *filename, const char *format)
 		       (unsigned long) statbuf.st_ctime,
 		       (unsigned long) statbuf.st_blksize
 		);
-#if ENABLE_SELINUX
+# if ENABLE_SELINUX
 		if (option_mask32 & OPT_SELINUX)
 			printf(" %lc\n", *scontext);
 		else
 			bb_putchar('\n');
-#endif
+# endif
 	} else {
 		char *linkname = NULL;
 
@@ -604,15 +605,15 @@ static bool do_stat(const char *filename, const char *format)
 		else
 			printf("  File: \"%s\"\n", filename);
 
-		printf("  Size: %-10ju\tBlocks: %-10ju IO Block: %-6lu %s\n"
-		       "Device: %jxh/%jud\tInode: %-10ju  Links: %-5lu",
-		       (uintmax_t) (statbuf.st_size),
-		       (uintmax_t) statbuf.st_blocks,
+		printf("  Size: %-10llu\tBlocks: %-10llu IO Block: %-6lu %s\n"
+		       "Device: %llxh/%llud\tInode: %-10llu  Links: %-5lu",
+		       (unsigned long long) statbuf.st_size,
+		       (unsigned long long) statbuf.st_blocks,
 		       (unsigned long) statbuf.st_blksize,
 		       file_type(&statbuf),
-		       (uintmax_t) statbuf.st_dev,
-		       (uintmax_t) statbuf.st_dev,
-		       (uintmax_t) statbuf.st_ino,
+		       (unsigned long long) statbuf.st_dev,
+		       (unsigned long long) statbuf.st_dev,
+		       (unsigned long long) statbuf.st_ino,
 		       (unsigned long) statbuf.st_nlink);
 		if (S_ISBLK(statbuf.st_mode) || S_ISCHR(statbuf.st_mode))
 			printf(" Device type: %lx,%lx\n",
@@ -627,9 +628,9 @@ static bool do_stat(const char *filename, const char *format)
 		       (pw_ent != NULL) ? pw_ent->pw_name : "UNKNOWN",
 		       (unsigned long) statbuf.st_gid,
 		       (gw_ent != NULL) ? gw_ent->gr_name : "UNKNOWN");
-#if ENABLE_SELINUX
+# if ENABLE_SELINUX
 		printf("   S_Context: %lc\n", *scontext);
-#endif
+# endif
 		printf("Access: %s\n" "Modify: %s\n" "Change: %s\n",
 		       human_time(statbuf.st_atime),
 		       human_time(statbuf.st_mtime),
diff --git a/include/libbb.h b/include/libbb.h
index 09852d0..3b7eea2 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -20,6 +20,7 @@
 #include <netdb.h>
 #include <setjmp.h>
 #include <signal.h>
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
diff --git a/include/platform.h b/include/platform.h
index a41daa0..c34a46e 100644
--- a/include/platform.h
+++ b/include/platform.h
@@ -215,6 +215,7 @@
 #ifndef __APPLE__
 # include <arpa/inet.h>
 # if !defined(__socklen_t_defined) && !defined(_SOCKLEN_T_DECLARED)
+#  define socklen_t bb_socklen_t
 typedef int socklen_t;
 # endif
 #else
@@ -250,21 +251,6 @@ typedef int socklen_t;
 #if defined __GLIBC__ || defined __UCLIBC__ \
  || defined __dietlibc__ || defined _NEWLIB_VERSION
 # include <features.h>
-# define HAVE_FEATURES_H
-# include <stdint.h>
-# define HAVE_STDINT_H
-#elif !defined __APPLE__
-/* Largest integral types. */
-# if BB_BIG_ENDIAN
-/* Looks BROKEN! */
-typedef long                intmax_t;
-typedef unsigned long       uintmax_t;
-# else
-__extension__
-typedef long long           intmax_t;
-__extension__
-typedef unsigned long long  uintmax_t;
-# endif
 #endif
 
 /* Size-saving "small" ints (arch-dependent) */
-- 
1.6.3.3



More information about the busybox-cvs mailing list