source: patches/coreutils-8.5-uname-1.patch@ 5359083

clfs-1.2 clfs-2.1 clfs-3.0.0-systemd clfs-3.0.0-sysvinit systemd sysvinit
Last change on this file since 5359083 was 3763058, checked in by Joe Ciccone <jciccone@…>, 14 years ago

Updated Coreutils to 8.4.

  • Property mode set to 100644
File size: 4.4 KB
RevLine 
[4f82906]1Submitted By: Jim Gifford <jim at cross-lfs dot org>
[3763058]2Date: 2010-07-26
3Initial Package Version: 5.97
[f74ae22]4Upstream Status: Not Accepted
5Origin: Gentoo - http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/coreutils
6Description: Display CPU Information from /proc/cpuinfo or /proc/sysinfo
7
[4f82906]8Rediffed for 7.1 by Jim Gifford
[b159483]9Rediffed for 7.5 by Jim Gifford
[3763058]10Rediffed for 8.4 by Joe Ciccone
[f74ae22]11
[3763058]12--- coreutils-8.5.orig/src/uname.c 2010-01-01 08:06:47.000000000 -0500
13+++ coreutils-8.5/src/uname.c 2010-07-26 20:44:24.389842706 -0400
[7b31c44]14@@ -50,6 +50,11 @@
[f74ae22]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"
[4f82906]26@@ -155,6 +160,117 @@
[f74ae22]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);
[4f82906]55+ /* finally collapse whitespace */
56+ tmp = buf;
57+ while (tmp[0] && tmp[1]) {
58+ if (isspace(tmp[0]) && isspace(tmp[1])) {
59+ memmove(tmp, tmp+1, strlen(tmp));
60+ continue;
61+ }
62+ ++tmp;
63+ }
[f74ae22]64+}
65+
66+static int __linux_procinfo (int x, char *fstr, size_t s)
67+{
68+ FILE *fp;
69+
70+ char *procinfo_keys[] = {
71+ /* --processor --hardware-platform */
72+ #if defined(__alpha__)
73+ "cpu model", "system type"
74+ #elif defined(__arm__)
75+ "Processor", "Hardware"
[4f82906]76+ #elif defined(__avr32__)
77+ "processor", "cpu family"
78+ #elif defined(__bfin__)
[f74ae22]79+ "CPU", "BOARD Name"
80+ #elif defined(__cris__)
81+ "cpu", "cpu model"
82+ #elif defined(__frv__)
83+ "CPU-Core", "System"
84+ #elif defined(__i386__) || defined(__x86_64__)
85+ "model name", "vendor_id"
86+ #elif defined(__ia64__)
87+ "family", "vendor"
88+ #elif defined(__hppa__)
89+ "cpu", "model"
90+ #elif defined(__m68k__)
91+ "CPU", "MMU"
92+ #elif defined(__mips__)
93+ "cpu model", "system type"
94+ #elif defined(__powerpc__) || defined(__powerpc64__)
95+ "cpu", "machine"
96+ #elif defined(__s390__) || defined(__s390x__)
97+ "Type", "Manufacturer"
98+ #elif defined(__sh__)
99+ "cpu type", "machine"
100+ #elif defined(sparc) || defined(__sparc__)
101+ "type", "cpu"
102+ #elif defined(__vax__)
103+ "cpu type", "cpu"
104+ #else
105+ "unknown", "unknown"
106+ #endif
107+ };
108+
109+ if ((fp = fopen(CPUINFO_FILE, "r")) != NULL) {
110+ char key[65], value[257], eol, *ret = NULL;
111+
112+ while (fscanf(fp, CPUINFO_FORMAT, key, value, &eol) != EOF) {
113+ __eat_cpuinfo_space(key);
114+ if (!strcmp(key, procinfo_keys[x])) {
115+ __eat_cpuinfo_space(value);
116+ ret = value;
117+ break;
118+ }
119+ if (eol != '\n') {
120+ /* we need two fscanf's here in case the previous
121+ * length limit caused us to read right up to the
122+ * newline ... doing "%*[^\n]\n" wont eat the newline
123+ */
124+ fscanf(fp, "%*[^\n]");
125+ fscanf(fp, "\n");
126+ }
127+ }
128+ fclose(fp);
129+
130+ if (ret) {
131+ strncpy(fstr, ret, s);
132+ return 0;
133+ }
134+ }
135+
136+ return -1;
137+}
138+
139+#endif
140+
141 /* Print ELEMENT, preceded by a space if something has already been
142 printed. */
143
[4f82906]144@@ -302,10 +418,14 @@
[f74ae22]145 if (toprint & PRINT_PROCESSOR)
146 {
147 char const *element = unknown;
148-#if HAVE_SYSINFO && defined SI_ARCHITECTURE
149+#if ( HAVE_SYSINFO && defined SI_ARCHITECTURE ) || defined(USE_PROCINFO)
150 {
[b159483]151 static char processor[257];
[f74ae22]152+#if defined(USE_PROCINFO)
[b159483]153+ if (0 <= __linux_procinfo (PROCINFO_PROCESSOR, processor, sizeof processor))
[f74ae22]154+#else
[b159483]155 if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
[f74ae22]156+#endif
[b159483]157 element = processor;
[f74ae22]158 }
159 #endif
[4f82906]160@@ -358,9 +478,13 @@
[f74ae22]161 if (element == unknown)
[b159483]162 {
163 static char hardware_platform[257];
[f74ae22]164+#if defined(USE_PROCINFO)
[b159483]165+ if (0 <= __linux_procinfo (PROCINFO_HARDWARE_PLATFORM, hardware_platform, sizeof hardware_platform))
[f74ae22]166+#else
[b159483]167 size_t s = sizeof hardware_platform;
168 static int mib[] = { CTL_HW, UNAME_HARDWARE_PLATFORM };
169 if (sysctl (mib, 2, hardware_platform, &s, 0, 0) >= 0)
[f74ae22]170+#endif
[b159483]171 element = hardware_platform;
172 }
[f74ae22]173 #endif
Note: See TracBrowser for help on using the repository browser.