[BusyBox] [PATCH] 64bit support in test

Bastian Blank waldi at debian.org
Wed Jul 28 09:55:18 UTC 2004


The attached patch makes it possible to compare big numbers with test.

Bastian

-- 
The sight of death frightens them [Earthers].
		-- Kras the Klingon, "Friday's Child", stardate 3497.2
-------------- next part --------------
Index: coreutils/test.c
===================================================================
--- coreutils/test.c	(revision 530)
+++ coreutils/test.c	(working copy)
@@ -155,19 +155,25 @@
 	0, 0, 0}
 };
 
+#ifdef CONFIG_FEATURE_TEST_64
+typedef int64_t arith_t;
+#else
+typedef int arith_t;
+#endif
+
 static char **t_wp;
 static struct t_op const *t_wp_op;
 static gid_t *group_array = NULL;
 static int ngroups;
 
 static enum token t_lex(char *s);
-static int oexpr(enum token n);
-static int aexpr(enum token n);
-static int nexpr(enum token n);
+static arith_t oexpr(enum token n);
+static arith_t aexpr(enum token n);
+static arith_t nexpr(enum token n);
 static int binop(void);
-static int primary(enum token n);
+static arith_t primary(enum token n);
 static int filstat(char *nm, enum token mode);
-static int getn(const char *s);
+static arith_t getn(const char *s);
 static int newerf(const char *f1, const char *f2);
 static int olderf(const char *f1, const char *f2);
 static int equalf(const char *f1, const char *f2);
@@ -232,9 +238,9 @@
 	}
 }
 
-static int oexpr(enum token n)
+static arith_t oexpr(enum token n)
 {
-	int res;
+	arith_t res;
 
 	res = aexpr(n);
 	if (t_lex(*++t_wp) == BOR) {
@@ -244,9 +250,9 @@
 	return res;
 }
 
-static int aexpr(enum token n)
+static arith_t aexpr(enum token n)
 {
-	int res;
+	arith_t res;
 
 	res = nexpr(n);
 	if (t_lex(*++t_wp) == BAND)
@@ -255,16 +261,16 @@
 	return res;
 }
 
-static int nexpr(enum token n)
+static arith_t nexpr(enum token n)
 {
 	if (n == UNOT)
 		return !nexpr(t_lex(*++t_wp));
 	return primary(n);
 }
 
-static int primary(enum token n)
+static arith_t primary(enum token n)
 {
-	int res;
+	arith_t res;
 
 	if (n == EOI) {
 		syntax(NULL, "argument expected");
@@ -441,13 +447,21 @@
 }
 
 /* atoi with error detection */
-static int getn(const char *s)
+static arith_t getn(const char *s)
 {
 	char *p;
+#ifdef CONFIG_FEATURE_TEST_64
+	long long r;
+#else
 	long r;
+#endif
 
 	errno = 0;
+#ifdef CONFIG_FEATURE_TEST_64
+	r = strtoll(s, &p, 10);
+#else
 	r = strtol(s, &p, 10);
+#endif
 
 	if (errno != 0)
 		bb_error_msg_and_die("%s: out of range", s);
@@ -456,7 +470,7 @@
 	if (*(bb_skip_whitespace(p)))
 		bb_error_msg_and_die("%s: bad number", s);
 
-	return (int) r;
+	return r;
 }
 
 static int newerf(const char *f1, const char *f2)
Index: coreutils/Config.in
===================================================================
--- coreutils/Config.in	(revision 530)
+++ coreutils/Config.in	(working copy)
@@ -455,6 +455,13 @@
 	      and bash) have test builtin.
 endif
 
+config CONFIG_FEATURE_TEST_64
+	bool "  Extend test to 64 bit"
+	default n
+	depends on CONFIG_TEST
+	help
+	  Enable 64-bit support in test.
+
 config CONFIG_TOUCH
 	bool "touch"
 	default n
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
Url : http://lists.busybox.net/pipermail/busybox/attachments/20040728/9d282a87/attachment-0002.pgp 


More information about the busybox mailing list