Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 573f6ba228a443105a16491b27786576 > files > 22

busybox-1.2.0-13.el5.src.rpm

diff -up busybox-1.2.0/coreutils/uname.c.dv busybox-1.2.0/coreutils/uname.c
--- busybox-1.2.0/coreutils/uname.c.dv	2006-06-30 18:42:07.000000000 -0400
+++ busybox-1.2.0/coreutils/uname.c	2009-03-17 08:01:06.000000000 -0400
@@ -20,25 +20,43 @@
 /* http://www.opengroup.org/onlinepubs/007904975/utilities/uname.html */
 
 /* Option		Example
+ * -s, --sysname<----->SunOS 
+ * -n, --nodename<---->rocky8 
+ * -r, --release<----->4.0 
+ * -v, --version 
+ * -m, --machine<----->sun 
+ * -a, --all<-><------>SunOS rocky8 4.0  sun 
+ * 
+ * The default behavior is equivalent to '-s'. 
+ * 
+ * David MacKenzie <djm@gnu.ai.mit.edu> 
+ * 
+ * GNU coreutils 6.10: 
+ * Option:                      struct   Example(s): 
+ *                              utsname 
+ *                              field: 
+ * -s, --kernel-name            sysname  Linux 
+ * -n, --nodename               nodename localhost.localdomain 
+ * -r, --kernel-release         release  2.6.29 
+ * -v, --kernel-version         version  #1 SMP Sun Jan 11 20:52:37 EST 2009 
+ * -m, --machine                machine  x86_64   i686 
+ * -p, --processor              (none)   x86_64   i686 
+ * -i, --hardware-platform      (none)   x86_64   i386 
+ *      NB: vanilla coreutils reports "unknown" -p and -i, 
+ *      x86_64 and i686/i386 shown above are Fedora's inventions. 
+ * -o, --operating-system       (none)   GNU/Linux 
+ * -a, --all: all of the above, in the order shown. 
+ *      If -p or -i is not known, don't show them 
+ */ 
 
-   -s, --sysname	SunOS
-   -n, --nodename	rocky8
-   -r, --release	4.0
-   -v, --version
-   -m, --machine	sun
-   -a, --all		SunOS rocky8 4.0  sun
-
-   The default behavior is equivalent to `-s'.
-
-   David MacKenzie <djm@gnu.ai.mit.edu> */
-
-/* Busyboxed by Erik Andersen */
-
-/* Further size reductions by Glenn McGrath and Manuel Novoa III. */
-
-/* Mar 16, 2003      Manuel Novoa III   (mjn3@codepoet.org)
+/* Busyboxed by Erik Andersen
  *
- * Now does proper error checking on i/o.  Plus some further space savings.
+ * Before 2003: Glenn McGrath and Manuel Novoa III 
+ *  Further size reductions. 
+ * Mar 16, 2003: Manuel Novoa III (mjn3@codepoet.org) 
+ *  Now does proper error checking on i/o.  Plus some further space savings. 
+ * Jan 2009: 
+ *  Fix handling of -a to not print "unknown", add -o and -i support. 
  */
 
 #include <stdio.h>
@@ -52,17 +70,21 @@
 
 typedef struct {
 	struct utsname name;
-	char processor[8];			/* for "unknown" */
+	char processor[sizeof(((struct utsname*)NULL)->machine)]; 
+	char platform[sizeof(((struct utsname*)NULL)->machine)]; 
+	char os[sizeof("GNU/Linux")]; 
 } uname_info_t;
 
-static const char options[] = "snrvmpa";
+static const char options[] = "snrvmpioa";
 static const unsigned short int utsname_offset[] = {
-	offsetof(uname_info_t,name.sysname),
-	offsetof(uname_info_t,name.nodename),
-	offsetof(uname_info_t,name.release),
-	offsetof(uname_info_t,name.version),
-	offsetof(uname_info_t,name.machine),
-	offsetof(uname_info_t,processor)
+	offsetof(uname_info_t, name.sysname), /* -s */ 
+	offsetof(uname_info_t, name.nodename), /* -n */ 
+	offsetof(uname_info_t, name.release), /* -r */ 
+	offsetof(uname_info_t, name.version), /* -v */ 
+	offsetof(uname_info_t, name.machine), /* -m */ 
+	offsetof(uname_info_t, processor), /* -p */ 
+	offsetof(uname_info_t, platform), /* -i */ 
+	offsetof(uname_info_t, os), /* -o */
 };
 
 int uname_main(int argc, char **argv)
@@ -71,8 +93,10 @@ int uname_main(int argc, char **argv)
 #if defined(__sparc__) && defined(__linux__)
 	char *fake_sparc = getenv("FAKE_SPARC");
 #endif
+	const char *unknown_str = "unknown"; 
+	const char *fmt; 
 	const unsigned short int *delta;
-	char toprint;
+	unsigned toprint;
 
 	toprint = bb_getopt_ulflags(argc, argv, options);
 
@@ -80,8 +104,9 @@ int uname_main(int argc, char **argv)
 		bb_show_usage();
 	}
 
-	if (toprint & (1 << 6)) {
-		toprint = 0x3f;
+	if (toprint & (1 << 8)) { /* -a => all opts on */ 
+		toprint = (1 << 8) - 1; 
+		unknown_str = ""; /* -a does not print unknown fields */ 
 	}
 
 	if (toprint == 0) {
@@ -100,14 +125,31 @@ int uname_main(int argc, char **argv)
 	}
 #endif
 
-	strcpy(uname_info.processor, "unknown");
+	strcpy(uname_info.processor, unknown_str); 
+	strcpy(uname_info.platform, unknown_str); 
+	strcpy(uname_info.os, "GNU/Linux"); 
+#if 1 
+	/* Fedora does something like this */ 
+	strcpy(uname_info.processor, uname_info.name.machine); 
+	strcpy(uname_info.platform, uname_info.name.machine); 
+	if (uname_info.platform[0] == 'i' 
+	 && uname_info.platform[1] 
+	 && uname_info.platform[2] == '8' 
+	 && uname_info.platform[3] == '6' 
+	) { 
+		uname_info.platform[1] = '3'; 
+	} 
+#endif 
+
 
 	delta=utsname_offset;
+	fmt = " %s" + 1;
 	do {
 		if (toprint & 1) {
-			bb_printf(((char *)(&uname_info)) + *delta);
-			if (toprint > 1) {
-				putchar(' ');
+			const char *p = (char *)(&uname_info) + *delta; 
+			if (p[0]) { 
+				printf(fmt, p); 
+				fmt = " %s"; 
 			}
 		}
 		++delta;