source: clfs-sysroot/patches/coreutils-6.12-uname-1.patch@ 64d2ffa

Last change on this file since 64d2ffa was 589e899, checked in by Joe Ciccone <jciccone@…>, 16 years ago

Update coreutils patches.

  • Property mode set to 100644
File size: 4.2 KB
RevLine 
[8f3d581]1Submitted By: Jim Gifford <jim at linuxfromscratch dot org>
2Date: 2006-08-24
3Initial Package Version: 5.97
[589e899]4 Rediffed against 6.12 by Joe Ciccone on 2008-08-30
[8f3d581]5Upstream Status: Not Accepted
6Origin: Gentoo - http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/coreutils
7Description: Display CPU Information from /proc/cpuinfo or /proc/sysinfo
8
9Original Patch by - Matthew Burgess and Scot McPherson
10
[589e899]11diff -Naur coreutils-6.12.orig/src/uname.c coreutils-6.12/src/uname.c
12--- coreutils-6.12.orig/src/uname.c 2008-05-26 02:40:33.000000000 -0400
13+++ coreutils-6.12/src/uname.c 2008-08-31 12:03:12.000000000 -0400
14@@ -50,6 +50,11 @@
[8f3d581]15 # include <mach-o/arch.h>
16 #endif
17
18+#if defined (__linux__)
19+# define USE_PROCINFO
20+# define UNAME_HARDWARE_PLATFORM
21+#endif
22+
23 #include "system.h"
24 #include "error.h"
25 #include "quote.h"
[589e899]26@@ -158,6 +163,106 @@
[8f3d581]27 exit (status);
28 }
29
30+#if defined(USE_PROCINFO)
31+
32+# if defined(__s390__) || defined(__s390x__)
33+# define CPUINFO_FILE "/proc/sysinfo"
34+# define CPUINFO_FORMAT "%64[^\t :]%*[ :]%256[^\n]%c"
35+# else
36+# define CPUINFO_FILE "/proc/cpuinfo"
37+# define CPUINFO_FORMAT "%64[^\t:]\t:%256[^\n]%c"
38+# endif
39+
40+# define PROCINFO_PROCESSOR 0
41+# define PROCINFO_HARDWARE_PLATFORM 1
42+
43+static void __eat_cpuinfo_space(char *buf)
44+{
45+ /* first eat trailing space */
46+ char *tmp = buf + strlen(buf) - 1;
47+ while (tmp > buf && isspace(*tmp))
48+ *tmp-- = '\0';
49+ /* then eat leading space */
50+ tmp = buf;
51+ while (*tmp && isspace(*tmp))
52+ tmp++;
53+ if (tmp != buf)
54+ memmove(buf, tmp, strlen(tmp)+1);
55+}
56+
57+static int __linux_procinfo (int x, char *fstr, size_t s)
58+{
59+ FILE *fp;
60+
61+ char *procinfo_keys[] = {
62+ /* --processor --hardware-platform */
63+ #if defined(__alpha__)
64+ "cpu model", "system type"
65+ #elif defined(__arm__)
66+ "Processor", "Hardware"
67+ #elif defined(bfin)
68+ "CPU", "BOARD Name"
69+ #elif defined(__cris__)
70+ "cpu", "cpu model"
71+ #elif defined(__frv__)
72+ "CPU-Core", "System"
73+ #elif defined(__i386__) || defined(__x86_64__)
74+ "model name", "vendor_id"
75+ #elif defined(__ia64__)
76+ "family", "vendor"
77+ #elif defined(__hppa__)
78+ "cpu", "model"
79+ #elif defined(__m68k__)
80+ "CPU", "MMU"
81+ #elif defined(__mips__)
82+ "cpu model", "system type"
83+ #elif defined(__powerpc__) || defined(__powerpc64__)
84+ "cpu", "machine"
85+ #elif defined(__s390__) || defined(__s390x__)
86+ "Type", "Manufacturer"
87+ #elif defined(__sh__)
88+ "cpu type", "machine"
89+ #elif defined(sparc) || defined(__sparc__)
90+ "type", "cpu"
91+ #elif defined(__vax__)
92+ "cpu type", "cpu"
93+ #else
94+ "unknown", "unknown"
95+ #endif
96+ };
97+
98+ if ((fp = fopen(CPUINFO_FILE, "r")) != NULL) {
99+ char key[65], value[257], eol, *ret = NULL;
100+
101+ while (fscanf(fp, CPUINFO_FORMAT, key, value, &eol) != EOF) {
102+ __eat_cpuinfo_space(key);
103+ if (!strcmp(key, procinfo_keys[x])) {
104+ __eat_cpuinfo_space(value);
105+ ret = value;
106+ break;
107+ }
108+ if (eol != '\n') {
109+ /* we need two fscanf's here in case the previous
110+ * length limit caused us to read right up to the
111+ * newline ... doing "%*[^\n]\n" wont eat the newline
112+ */
113+ fscanf(fp, "%*[^\n]");
114+ fscanf(fp, "\n");
115+ }
116+ }
117+ fclose(fp);
118+
119+ if (ret) {
120+ strncpy(fstr, ret, s);
121+ return 0;
122+ }
123+ }
124+
125+ return -1;
126+}
127+
128+#endif
129+
130 /* Print ELEMENT, preceded by a space if something has already been
131 printed. */
132
[589e899]133@@ -305,10 +410,14 @@
[8f3d581]134 if (toprint & PRINT_PROCESSOR)
135 {
136 char const *element = unknown;
137-#if HAVE_SYSINFO && defined SI_ARCHITECTURE
138+#if ( HAVE_SYSINFO && defined SI_ARCHITECTURE ) || defined(USE_PROCINFO)
139 {
140 static char processor[257];
141+#if defined(USE_PROCINFO)
142+ if (0 <= __linux_procinfo (PROCINFO_PROCESSOR, processor, sizeof processor))
143+#else
144 if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
145+#endif
146 element = processor;
147 }
148 #endif
[589e899]149@@ -361,9 +470,13 @@
[8f3d581]150 if (element == unknown)
151 {
152 static char hardware_platform[257];
153+#if defined(USE_PROCINFO)
154+ if (0 <= __linux_procinfo (PROCINFO_HARDWARE_PLATFORM, hardware_platform, sizeof hardware_platform))
155+#else
156 size_t s = sizeof hardware_platform;
157 static int mib[] = { CTL_HW, UNAME_HARDWARE_PLATFORM };
158 if (sysctl (mib, 2, hardware_platform, &s, 0, 0) >= 0)
159+#endif
160 element = hardware_platform;
161 }
162 #endif
Note: See TracBrowser for help on using the repository browser.