source: patches/coreutils-8.16-uname-1.patch @ de4abd5

clfs-2.1clfs-3.0.0-systemdclfs-3.0.0-sysvinitsystemdsysvinit
Last change on this file since de4abd5 was de4abd5, checked in by Jonathan Norman <jon@…>, 12 years ago

Rediffed coreutils uname patch for 8.16

  • Property mode set to 100644
File size: 14.9 KB
RevLine 
[de4abd5]1Submitted By: Jim Gifford <jim at cross-lfs dot org>
2Date: 2010-07-26
3Initial Package Version: 5.97
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
8Rediffed for 7.1 by Jim Gifford
9Rediffed for 7.5 by Jim Gifford
10Rediffed for 8.4 by Joe Ciccone
11Rediffed for 8.9 by Joe Ciccone
12Rediffed for 8.16 by Jonathan Norman - 2012-06-10
13
14diff -Naur coreutils-8.16.orig/src/uname.c coreutils-8.16/src/uname.c
15--- coreutils-8.16.orig/src/uname.c     2012-06-10 08:41:13.381458681 +0000
16+++ coreutils-8.16/src/uname.c  2012-06-10 08:41:29.665894170 +0000
17@@ -49,6 +49,11 @@
18 # include <mach-o/arch.h>
19 #endif
20 
21+#if defined (__linux__)
22+# define USE_PROCINFO
23+# define UNAME_HARDWARE_PLATFORM
24+#endif
25+
26 #include "system.h"
27 #include "error.h"
28 #include "quote.h"
29@@ -153,6 +158,117 @@
30   exit (status);
31 }
32 
33+#if defined(USE_PROCINFO)
34+
35+# if defined(__s390__) || defined(__s390x__)
36+#  define CPUINFO_FILE    "/proc/sysinfo"
37+#  define CPUINFO_FORMAT  "%64[^\t :]%*[ :]%256[^\n]%c"
38+# else
39+#  define CPUINFO_FILE    "/proc/cpuinfo"
40+#  define CPUINFO_FORMAT  "%64[^\t:]\t:%256[^\n]%c"
41+# endif
42+
43+# define PROCINFO_PROCESSOR      0
44+# define PROCINFO_HARDWARE_PLATFORM 1
45+
46+static void __eat_cpuinfo_space(char *buf)
47+{
48+       /* first eat trailing space */
49+       char *tmp = buf + strlen(buf) - 1;
50+       while (tmp > buf && isspace(*tmp))
51+               *tmp-- = '\0';
52+       /* then eat leading space */
53+       tmp = buf;
54+       while (*tmp && isspace(*tmp))
55+               tmp++;
56+       if (tmp != buf)
57+               memmove(buf, tmp, strlen(tmp)+1);
58+       /* finally collapse whitespace */
59+       tmp = buf;
60+       while (tmp[0] && tmp[1]) {
61+               if (isspace(tmp[0]) && isspace(tmp[1])) {
62+                       memmove(tmp, tmp+1, strlen(tmp));
63+                       continue;
64+               }
65+               ++tmp;
66+       }
67+}
68+
69+static int __linux_procinfo (int x, char *fstr, size_t s)
70+{
71+       FILE *fp;
72+
73+       char *procinfo_keys[] = {
74+               /* --processor --hardware-platform */
75+               #if defined(__alpha__)
76+                       "cpu model", "system type"
77+               #elif defined(__arm__)
78+                       "Processor", "Hardware"
79+               #elif defined(__avr32__)
80+                       "processor", "cpu family"
81+               #elif defined(__bfin__)
82+                       "CPU", "BOARD Name"
83+               #elif defined(__cris__)
84+                       "cpu", "cpu model"
85+               #elif defined(__frv__)
86+                       "CPU-Core", "System"
87+               #elif defined(__i386__) || defined(__x86_64__)
88+                       "model name", "vendor_id"
89+               #elif defined(__ia64__)
90+                       "family", "vendor"
91+               #elif defined(__hppa__)
92+                       "cpu", "model"
93+               #elif defined(__m68k__)
94+                       "CPU", "MMU"
95+               #elif defined(__mips__)
96+                       "cpu model", "system type"
97+               #elif defined(__powerpc__) || defined(__powerpc64__)
98+                       "cpu", "machine"
99+               #elif defined(__s390__) || defined(__s390x__)
100+                       "Type", "Manufacturer"
101+               #elif defined(__sh__)
102+                       "cpu type", "machine"
103+               #elif defined(sparc) || defined(__sparc__)
104+                       "type", "cpu"
105+               #elif defined(__vax__)
106+                       "cpu type", "cpu"
107+               #else
108+                       "unknown", "unknown"
109+               #endif
110+       };
111+
112+       if ((fp = fopen(CPUINFO_FILE, "r")) != NULL) {
113+               char key[65], value[257], eol, *ret = NULL;
114+
115+               while (fscanf(fp, CPUINFO_FORMAT, key, value, &eol) != EOF) {
116+                       __eat_cpuinfo_space(key);
117+                       if (!strcmp(key, procinfo_keys[x])) {
118+                               __eat_cpuinfo_space(value);
119+                               ret = value;
120+                               break;
121+                       }
122+                       if (eol != '\n') {
123+                               /* we need two fscanf's here in case the previous
124+                                * length limit caused us to read right up to the
125+                                * newline ... doing "%*[^\n]\n" wont eat the newline
126+                                */
127+                               fscanf(fp, "%*[^\n]");
128+                               fscanf(fp, "\n");
129+                       }
130+               }
131+               fclose(fp);
132+
133+               if (ret) {
134+                       strncpy(fstr, ret, s);
135+                       return 0;
136+               }
137+       }
138+
139+       return -1;
140+}
141+
142+#endif
143+
144 /* Print ELEMENT, preceded by a space if something has already been
145    printed.  */
146 
147@@ -300,10 +416,14 @@
148   if (toprint & PRINT_PROCESSOR)
149     {
150       char const *element = unknown;
151-#if HAVE_SYSINFO && defined SI_ARCHITECTURE
152+#if ( HAVE_SYSINFO && defined SI_ARCHITECTURE ) || defined(USE_PROCINFO)
153       {
154         static char processor[257];
155+#if defined(USE_PROCINFO)
156+        if (0 <= __linux_procinfo (PROCINFO_PROCESSOR, processor, sizeof processor))
157+#else
158         if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
159+#endif
160           element = processor;
161       }
162 #endif
163@@ -356,9 +476,13 @@
164       if (element == unknown)
165         {
166           static char hardware_platform[257];
167+#if defined(USE_PROCINFO)
168+        if (0 <= __linux_procinfo (PROCINFO_HARDWARE_PLATFORM, hardware_platform, sizeof hardware_platform))
169+#else
170           size_t s = sizeof hardware_platform;
171           static int mib[] = { CTL_HW, UNAME_HARDWARE_PLATFORM };
172           if (sysctl (mib, 2, hardware_platform, &s, 0, 0) >= 0)
173+#endif
174             element = hardware_platform;
175         }
176 #endif
177diff -Naur coreutils-8.16.orig/src/uname.c.orig coreutils-8.16/src/uname.c.orig
178--- coreutils-8.16.orig/src/uname.c.orig        1970-01-01 00:00:00.000000000 +0000
179+++ coreutils-8.16/src/uname.c.orig     2012-03-24 20:26:51.000000000 +0000
180@@ -0,0 +1,375 @@
181+/* uname -- print system information
182+
183+   Copyright (C) 1989-2012 Free Software Foundation, Inc.
184+
185+   This program is free software: you can redistribute it and/or modify
186+   it under the terms of the GNU General Public License as published by
187+   the Free Software Foundation, either version 3 of the License, or
188+   (at your option) any later version.
189+
190+   This program is distributed in the hope that it will be useful,
191+   but WITHOUT ANY WARRANTY; without even the implied warranty of
192+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
193+   GNU General Public License for more details.
194+
195+   You should have received a copy of the GNU General Public License
196+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
197+
198+/* Written by David MacKenzie <djm@gnu.ai.mit.edu> */
199+
200+#include <config.h>
201+#include <stdio.h>
202+#include <sys/types.h>
203+#include <sys/utsname.h>
204+#include <getopt.h>
205+
206+#if HAVE_SYSINFO && HAVE_SYS_SYSTEMINFO_H
207+# include <sys/systeminfo.h>
208+#endif
209+
210+#if HAVE_SYS_SYSCTL_H
211+# if HAVE_SYS_PARAM_H
212+#  include <sys/param.h> /* needed for OpenBSD 3.0 */
213+# endif
214+# include <sys/sysctl.h>
215+# ifdef HW_MODEL
216+#  ifdef HW_MACHINE_ARCH
217+/* E.g., FreeBSD 4.5, NetBSD 1.5.2 */
218+#   define UNAME_HARDWARE_PLATFORM HW_MODEL
219+#   define UNAME_PROCESSOR HW_MACHINE_ARCH
220+#  else
221+/* E.g., OpenBSD 3.0 */
222+#   define UNAME_PROCESSOR HW_MODEL
223+#  endif
224+# endif
225+#endif
226+
227+#ifdef __APPLE__
228+# include <mach/machine.h>
229+# include <mach-o/arch.h>
230+#endif
231+
232+#include "system.h"
233+#include "error.h"
234+#include "quote.h"
235+#include "uname.h"
236+
237+/* The official name of this program (e.g., no 'g' prefix).  */
238+#define PROGRAM_NAME (uname_mode == UNAME_UNAME ? "uname" : "arch")
239+
240+#define AUTHORS proper_name ("David MacKenzie")
241+#define ARCH_AUTHORS "David MacKenzie", "Karel Zak"
242+
243+/* Values that are bitwise or'd into 'toprint'. */
244+/* Kernel name. */
245+#define PRINT_KERNEL_NAME 1
246+
247+/* Node name on a communications network. */
248+#define PRINT_NODENAME 2
249+
250+/* Kernel release. */
251+#define PRINT_KERNEL_RELEASE 4
252+
253+/* Kernel version. */
254+#define PRINT_KERNEL_VERSION 8
255+
256+/* Machine hardware name. */
257+#define PRINT_MACHINE 16
258+
259+/* Processor type. */
260+#define PRINT_PROCESSOR 32
261+
262+/* Hardware platform.  */
263+#define PRINT_HARDWARE_PLATFORM 64
264+
265+/* Operating system.  */
266+#define PRINT_OPERATING_SYSTEM 128
267+
268+static struct option const uname_long_options[] =
269+{
270+  {"all", no_argument, NULL, 'a'},
271+  {"kernel-name", no_argument, NULL, 's'},
272+  {"sysname", no_argument, NULL, 's'}, /* Obsolescent.  */
273+  {"nodename", no_argument, NULL, 'n'},
274+  {"kernel-release", no_argument, NULL, 'r'},
275+  {"release", no_argument, NULL, 'r'},  /* Obsolescent.  */
276+  {"kernel-version", no_argument, NULL, 'v'},
277+  {"machine", no_argument, NULL, 'm'},
278+  {"processor", no_argument, NULL, 'p'},
279+  {"hardware-platform", no_argument, NULL, 'i'},
280+  {"operating-system", no_argument, NULL, 'o'},
281+  {GETOPT_HELP_OPTION_DECL},
282+  {GETOPT_VERSION_OPTION_DECL},
283+  {NULL, 0, NULL, 0}
284+};
285+
286+static struct option const arch_long_options[] =
287+{
288+  {GETOPT_HELP_OPTION_DECL},
289+  {GETOPT_VERSION_OPTION_DECL},
290+  {NULL, 0, NULL, 0}
291+};
292+
293+void
294+usage (int status)
295+{
296+  if (status != EXIT_SUCCESS)
297+    emit_try_help ();
298+  else
299+    {
300+      printf (_("Usage: %s [OPTION]...\n"), program_name);
301+
302+      if (uname_mode == UNAME_UNAME)
303+        {
304+          fputs (_("\
305+Print certain system information.  With no OPTION, same as -s.\n\
306+\n\
307+  -a, --all                print all information, in the following order,\n\
308+                             except omit -p and -i if unknown:\n\
309+  -s, --kernel-name        print the kernel name\n\
310+  -n, --nodename           print the network node hostname\n\
311+  -r, --kernel-release     print the kernel release\n\
312+"), stdout);
313+          fputs (_("\
314+  -v, --kernel-version     print the kernel version\n\
315+  -m, --machine            print the machine hardware name\n\
316+  -p, --processor          print the processor type or \"unknown\"\n\
317+  -i, --hardware-platform  print the hardware platform or \"unknown\"\n\
318+  -o, --operating-system   print the operating system\n\
319+"), stdout);
320+        }
321+      else
322+        {
323+          fputs (_("\
324+Print machine architecture.\n\
325+\n\
326+"), stdout);
327+        }
328+
329+      fputs (HELP_OPTION_DESCRIPTION, stdout);
330+      fputs (VERSION_OPTION_DESCRIPTION, stdout);
331+      emit_ancillary_info ();
332+    }
333+  exit (status);
334+}
335+
336+/* Print ELEMENT, preceded by a space if something has already been
337+   printed.  */
338+
339+static void
340+print_element (char const *element)
341+{
342+  static bool printed;
343+  if (printed)
344+    putchar (' ');
345+  printed = true;
346+  fputs (element, stdout);
347+}
348+
349+
350+/* Set all the option flags according to the switches specified.
351+   Return the mask indicating which elements to print.  */
352+
353+static int
354+decode_switches (int argc, char **argv)
355+{
356+  int c;
357+  unsigned int toprint = 0;
358+
359+  if (uname_mode == UNAME_ARCH)
360+    {
361+      while ((c = getopt_long (argc, argv, "",
362+                               arch_long_options, NULL)) != -1)
363+        {
364+          switch (c)
365+            {
366+            case_GETOPT_HELP_CHAR;
367+
368+            case_GETOPT_VERSION_CHAR (PROGRAM_NAME, ARCH_AUTHORS);
369+
370+            default:
371+              usage (EXIT_FAILURE);
372+            }
373+        }
374+      toprint = PRINT_MACHINE;
375+    }
376+  else
377+    {
378+      while ((c = getopt_long (argc, argv, "asnrvmpio",
379+                               uname_long_options, NULL)) != -1)
380+        {
381+          switch (c)
382+            {
383+            case 'a':
384+              toprint = UINT_MAX;
385+              break;
386+
387+            case 's':
388+              toprint |= PRINT_KERNEL_NAME;
389+              break;
390+
391+            case 'n':
392+              toprint |= PRINT_NODENAME;
393+              break;
394+
395+            case 'r':
396+              toprint |= PRINT_KERNEL_RELEASE;
397+              break;
398+
399+            case 'v':
400+              toprint |= PRINT_KERNEL_VERSION;
401+              break;
402+
403+            case 'm':
404+              toprint |= PRINT_MACHINE;
405+              break;
406+
407+            case 'p':
408+              toprint |= PRINT_PROCESSOR;
409+              break;
410+
411+            case 'i':
412+              toprint |= PRINT_HARDWARE_PLATFORM;
413+              break;
414+
415+            case 'o':
416+              toprint |= PRINT_OPERATING_SYSTEM;
417+              break;
418+
419+            case_GETOPT_HELP_CHAR;
420+
421+            case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
422+
423+            default:
424+              usage (EXIT_FAILURE);
425+            }
426+        }
427+    }
428+
429+  if (argc != optind)
430+    {
431+      error (0, 0, _("extra operand %s"), quote (argv[optind]));
432+      usage (EXIT_FAILURE);
433+    }
434+
435+  return toprint;
436+}
437+
438+int
439+main (int argc, char **argv)
440+{
441+  static char const unknown[] = "unknown";
442+
443+  /* Mask indicating which elements to print. */
444+  unsigned int toprint = 0;
445+
446+  initialize_main (&argc, &argv);
447+  set_program_name (argv[0]);
448+  setlocale (LC_ALL, "");
449+  bindtextdomain (PACKAGE, LOCALEDIR);
450+  textdomain (PACKAGE);
451+
452+  atexit (close_stdout);
453+
454+  toprint = decode_switches (argc, argv);
455+
456+  if (toprint == 0)
457+    toprint = PRINT_KERNEL_NAME;
458+
459+  if (toprint
460+       & (PRINT_KERNEL_NAME | PRINT_NODENAME | PRINT_KERNEL_RELEASE
461+          | PRINT_KERNEL_VERSION | PRINT_MACHINE))
462+    {
463+      struct utsname name;
464+
465+      if (uname (&name) == -1)
466+        error (EXIT_FAILURE, errno, _("cannot get system name"));
467+
468+      if (toprint & PRINT_KERNEL_NAME)
469+        print_element (name.sysname);
470+      if (toprint & PRINT_NODENAME)
471+        print_element (name.nodename);
472+      if (toprint & PRINT_KERNEL_RELEASE)
473+        print_element (name.release);
474+      if (toprint & PRINT_KERNEL_VERSION)
475+        print_element (name.version);
476+      if (toprint & PRINT_MACHINE)
477+        print_element (name.machine);
478+    }
479+
480+  if (toprint & PRINT_PROCESSOR)
481+    {
482+      char const *element = unknown;
483+#if HAVE_SYSINFO && defined SI_ARCHITECTURE
484+      {
485+        static char processor[257];
486+        if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
487+          element = processor;
488+      }
489+#endif
490+#ifdef UNAME_PROCESSOR
491+      if (element == unknown)
492+        {
493+          static char processor[257];
494+          size_t s = sizeof processor;
495+          static int mib[] = { CTL_HW, UNAME_PROCESSOR };
496+          if (sysctl (mib, 2, processor, &s, 0, 0) >= 0)
497+            element = processor;
498+
499+# ifdef __APPLE__
500+          /* This kludge works around a bug in Mac OS X.  */
501+          if (element == unknown)
502+            {
503+              cpu_type_t cputype;
504+              size_t s = sizeof cputype;
505+              NXArchInfo const *ai;
506+              if (sysctlbyname ("hw.cputype", &cputype, &s, NULL, 0) == 0
507+                  && (ai = NXGetArchInfoFromCpuType (cputype,
508+                                                     CPU_SUBTYPE_MULTIPLE))
509+                  != NULL)
510+                element = ai->name;
511+
512+              /* Hack "safely" around the ppc vs. powerpc return value. */
513+              if (cputype == CPU_TYPE_POWERPC
514+                  && STRNCMP_LIT (element, "ppc") == 0)
515+                element = "powerpc";
516+            }
517+# endif
518+        }
519+#endif
520+      if (! (toprint == UINT_MAX && element == unknown))
521+        print_element (element);
522+    }
523+
524+  if (toprint & PRINT_HARDWARE_PLATFORM)
525+    {
526+      char const *element = unknown;
527+#if HAVE_SYSINFO && defined SI_PLATFORM
528+      {
529+        static char hardware_platform[257];
530+        if (0 <= sysinfo (SI_PLATFORM,
531+                          hardware_platform, sizeof hardware_platform))
532+          element = hardware_platform;
533+      }
534+#endif
535+#ifdef UNAME_HARDWARE_PLATFORM
536+      if (element == unknown)
537+        {
538+          static char hardware_platform[257];
539+          size_t s = sizeof hardware_platform;
540+          static int mib[] = { CTL_HW, UNAME_HARDWARE_PLATFORM };
541+          if (sysctl (mib, 2, hardware_platform, &s, 0, 0) >= 0)
542+            element = hardware_platform;
543+        }
544+#endif
545+      if (! (toprint == UINT_MAX && element == unknown))
546+        print_element (element);
547+    }
548+
549+  if (toprint & PRINT_OPERATING_SYSTEM)
550+    print_element (HOST_OPERATING_SYSTEM);
551+
552+  putchar ('\n');
553+
554+  exit (EXIT_SUCCESS);
555+}
Note: See TracBrowser for help on using the repository browser.