source: patches/coreutils-8.20-uname-1.patch @ 683fec6

clfs-2.1clfs-3.0.0-systemdclfs-3.0.0-sysvinitsystemdsysvinit
Last change on this file since 683fec6 was 3ddeb23, checked in by William Harrington <kb0iic@…>, 11 years ago

Update coreutils patch header information.

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