| [1ca50e7] | 1 | Submitted By: Jim Gifford <jim at cross-lfs dot org> | 
|---|
|  | 2 | Date: 2010-07-26 | 
|---|
|  | 3 | Initial Package Version: 5.97 | 
|---|
|  | 4 | Upstream Status: Not Accepted | 
|---|
|  | 5 | Origin: Gentoo - http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/coreutils | 
|---|
|  | 6 | Description: Display CPU Information from /proc/cpuinfo or /proc/sysinfo | 
|---|
|  | 7 |  | 
|---|
|  | 8 | Rediffed for 7.1 by Jim Gifford | 
|---|
|  | 9 | Rediffed for 7.5 by Jim Gifford | 
|---|
|  | 10 | Rediffed for 8.4 by Joe Ciccone | 
|---|
|  | 11 | Rediffed for 8.9 by Joe Ciccone | 
|---|
|  | 12 | Rediffed for 8.16 by Jonathan Norman - 2012-06-10 | 
|---|
|  | 13 | Rediffed for 8.19 by William Harrington - 2012-08-27 | 
|---|
|  | 14 | Renamed for 8.20 by William Harrington - 2012-11-01 | 
|---|
|  | 15 | Rediffed for 8.21 by William Harrington 2013-05-31 | 
|---|
|  | 16 | Renamed for 8.22 by William Harrington - 2013-12-14 | 
|---|
|  | 17 | Renamed for 8.23 by William Harrington - 2014-10-30 | 
|---|
|  | 18 |  | 
|---|
|  | 19 | diff -Naur coreutils-8.21.orig/src/uname.c coreutils-8.21/src/uname.c | 
|---|
|  | 20 | --- coreutils-8.21.orig/src/uname.c     2013-01-31 00:46:24.000000000 +0000 | 
|---|
|  | 21 | +++ coreutils-8.21/src/uname.c  2013-05-31 13:41:32.683326834 +0000 | 
|---|
|  | 22 | @@ -49,6 +49,11 @@ | 
|---|
|  | 23 | # include <mach-o/arch.h> | 
|---|
|  | 24 | #endif | 
|---|
|  | 25 |  | 
|---|
|  | 26 | +#if defined (__linux__) | 
|---|
|  | 27 | +# define USE_PROCINFO | 
|---|
|  | 28 | +# define UNAME_HARDWARE_PLATFORM | 
|---|
|  | 29 | +#endif | 
|---|
|  | 30 | + | 
|---|
|  | 31 | #include "system.h" | 
|---|
|  | 32 | #include "error.h" | 
|---|
|  | 33 | #include "quote.h" | 
|---|
|  | 34 | @@ -153,6 +158,117 @@ | 
|---|
|  | 35 | exit (status); | 
|---|
|  | 36 | } | 
|---|
|  | 37 |  | 
|---|
|  | 38 | +#if defined(USE_PROCINFO) | 
|---|
|  | 39 | + | 
|---|
|  | 40 | +# if defined(__s390__) || defined(__s390x__) | 
|---|
|  | 41 | +#  define CPUINFO_FILE    "/proc/sysinfo" | 
|---|
|  | 42 | +#  define CPUINFO_FORMAT  "%64[^\t :]%*[ :]%256[^\n]%c" | 
|---|
|  | 43 | +# else | 
|---|
|  | 44 | +#  define CPUINFO_FILE    "/proc/cpuinfo" | 
|---|
|  | 45 | +#  define CPUINFO_FORMAT  "%64[^\t:]\t:%256[^\n]%c" | 
|---|
|  | 46 | +# endif | 
|---|
|  | 47 | + | 
|---|
|  | 48 | +# define PROCINFO_PROCESSOR      0 | 
|---|
|  | 49 | +# define PROCINFO_HARDWARE_PLATFORM 1 | 
|---|
|  | 50 | + | 
|---|
|  | 51 | +static void __eat_cpuinfo_space(char *buf) | 
|---|
|  | 52 | +{ | 
|---|
|  | 53 | +       /* first eat trailing space */ | 
|---|
|  | 54 | +       char *tmp = buf + strlen(buf) - 1; | 
|---|
|  | 55 | +       while (tmp > buf && isspace(*tmp)) | 
|---|
|  | 56 | +               *tmp-- = '\0'; | 
|---|
|  | 57 | +       /* then eat leading space */ | 
|---|
|  | 58 | +       tmp = buf; | 
|---|
|  | 59 | +       while (*tmp && isspace(*tmp)) | 
|---|
|  | 60 | +               tmp++; | 
|---|
|  | 61 | +       if (tmp != buf) | 
|---|
|  | 62 | +               memmove(buf, tmp, strlen(tmp)+1); | 
|---|
|  | 63 | +       /* finally collapse whitespace */ | 
|---|
|  | 64 | +       tmp = buf; | 
|---|
|  | 65 | +       while (tmp[0] && tmp[1]) { | 
|---|
|  | 66 | +               if (isspace(tmp[0]) && isspace(tmp[1])) { | 
|---|
|  | 67 | +                       memmove(tmp, tmp+1, strlen(tmp)); | 
|---|
|  | 68 | +                       continue; | 
|---|
|  | 69 | +               } | 
|---|
|  | 70 | +               ++tmp; | 
|---|
|  | 71 | +       } | 
|---|
|  | 72 | +} | 
|---|
|  | 73 | + | 
|---|
|  | 74 | +static int __linux_procinfo (int x, char *fstr, size_t s) | 
|---|
|  | 75 | +{ | 
|---|
|  | 76 | +       FILE *fp; | 
|---|
|  | 77 | + | 
|---|
|  | 78 | +       char *procinfo_keys[] = { | 
|---|
|  | 79 | +               /* --processor --hardware-platform */ | 
|---|
|  | 80 | +               #if defined(__alpha__) | 
|---|
|  | 81 | +                       "cpu model", "system type" | 
|---|
|  | 82 | +               #elif defined(__arm__) | 
|---|
|  | 83 | +                       "Processor", "Hardware" | 
|---|
|  | 84 | +               #elif defined(__avr32__) | 
|---|
|  | 85 | +                       "processor", "cpu family" | 
|---|
|  | 86 | +               #elif defined(__bfin__) | 
|---|
|  | 87 | +                       "CPU", "BOARD Name" | 
|---|
|  | 88 | +               #elif defined(__cris__) | 
|---|
|  | 89 | +                       "cpu", "cpu model" | 
|---|
|  | 90 | +               #elif defined(__frv__) | 
|---|
|  | 91 | +                       "CPU-Core", "System" | 
|---|
|  | 92 | +               #elif defined(__i386__) || defined(__x86_64__) | 
|---|
|  | 93 | +                       "model name", "vendor_id" | 
|---|
|  | 94 | +               #elif defined(__ia64__) | 
|---|
|  | 95 | +                       "family", "vendor" | 
|---|
|  | 96 | +               #elif defined(__hppa__) | 
|---|
|  | 97 | +                       "cpu", "model" | 
|---|
|  | 98 | +               #elif defined(__m68k__) | 
|---|
|  | 99 | +                       "CPU", "MMU" | 
|---|
|  | 100 | +               #elif defined(__mips__) | 
|---|
|  | 101 | +                       "cpu model", "system type" | 
|---|
|  | 102 | +               #elif defined(__powerpc__) || defined(__powerpc64__) | 
|---|
|  | 103 | +                       "cpu", "machine" | 
|---|
|  | 104 | +               #elif defined(__s390__) || defined(__s390x__) | 
|---|
|  | 105 | +                       "Type", "Manufacturer" | 
|---|
|  | 106 | +               #elif defined(__sh__) | 
|---|
|  | 107 | +                       "cpu type", "machine" | 
|---|
|  | 108 | +               #elif defined(sparc) || defined(__sparc__) | 
|---|
|  | 109 | +                       "type", "cpu" | 
|---|
|  | 110 | +               #elif defined(__vax__) | 
|---|
|  | 111 | +                       "cpu type", "cpu" | 
|---|
|  | 112 | +               #else | 
|---|
|  | 113 | +                       "unknown", "unknown" | 
|---|
|  | 114 | +               #endif | 
|---|
|  | 115 | +       }; | 
|---|
|  | 116 | + | 
|---|
|  | 117 | +       if ((fp = fopen(CPUINFO_FILE, "r")) != NULL) { | 
|---|
|  | 118 | +               char key[65], value[257], eol, *ret = NULL; | 
|---|
|  | 119 | + | 
|---|
|  | 120 | +               while (fscanf(fp, CPUINFO_FORMAT, key, value, &eol) != EOF) { | 
|---|
|  | 121 | +                       __eat_cpuinfo_space(key); | 
|---|
|  | 122 | +                       if (!strcmp(key, procinfo_keys[x])) { | 
|---|
|  | 123 | +                               __eat_cpuinfo_space(value); | 
|---|
|  | 124 | +                               ret = value; | 
|---|
|  | 125 | +                               break; | 
|---|
|  | 126 | +                       } | 
|---|
|  | 127 | +                       if (eol != '\n') { | 
|---|
|  | 128 | +                               /* we need two fscanf's here in case the previous | 
|---|
|  | 129 | +                                * length limit caused us to read right up to the | 
|---|
|  | 130 | +                                * newline ... doing "%*[^\n]\n" wont eat the newline | 
|---|
|  | 131 | +                                */ | 
|---|
|  | 132 | +                               fscanf(fp, "%*[^\n]"); | 
|---|
|  | 133 | +                               fscanf(fp, "\n"); | 
|---|
|  | 134 | +                       } | 
|---|
|  | 135 | +               } | 
|---|
|  | 136 | +               fclose(fp); | 
|---|
|  | 137 | + | 
|---|
|  | 138 | +               if (ret) { | 
|---|
|  | 139 | +                       strncpy(fstr, ret, s); | 
|---|
|  | 140 | +                       return 0; | 
|---|
|  | 141 | +               } | 
|---|
|  | 142 | +       } | 
|---|
|  | 143 | + | 
|---|
|  | 144 | +       return -1; | 
|---|
|  | 145 | +} | 
|---|
|  | 146 | + | 
|---|
|  | 147 | +#endif | 
|---|
|  | 148 | + | 
|---|
|  | 149 | /* Print ELEMENT, preceded by a space if something has already been | 
|---|
|  | 150 | printed.  */ | 
|---|
|  | 151 |  | 
|---|
|  | 152 | @@ -300,10 +416,14 @@ | 
|---|
|  | 153 | if (toprint & PRINT_PROCESSOR) | 
|---|
|  | 154 | { | 
|---|
|  | 155 | char const *element = unknown; | 
|---|
|  | 156 | -#if HAVE_SYSINFO && defined SI_ARCHITECTURE | 
|---|
|  | 157 | +#if ( HAVE_SYSINFO && defined SI_ARCHITECTURE ) || defined(USE_PROCINFO) | 
|---|
|  | 158 | { | 
|---|
|  | 159 | static char processor[257]; | 
|---|
|  | 160 | +#if defined(USE_PROCINFO) | 
|---|
|  | 161 | +        if (0 <= __linux_procinfo (PROCINFO_PROCESSOR, processor, sizeof processor)) | 
|---|
|  | 162 | +#else | 
|---|
|  | 163 | if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor)) | 
|---|
|  | 164 | +#endif | 
|---|
|  | 165 | element = processor; | 
|---|
|  | 166 | } | 
|---|
|  | 167 | #endif | 
|---|
|  | 168 | @@ -356,9 +476,13 @@ | 
|---|
|  | 169 | if (element == unknown) | 
|---|
|  | 170 | { | 
|---|
|  | 171 | static char hardware_platform[257]; | 
|---|
|  | 172 | +#if defined(USE_PROCINFO) | 
|---|
|  | 173 | +        if (0 <= __linux_procinfo (PROCINFO_HARDWARE_PLATFORM, hardware_platform, sizeof hardware_platform)) | 
|---|
|  | 174 | +#else | 
|---|
|  | 175 | size_t s = sizeof hardware_platform; | 
|---|
|  | 176 | static int mib[] = { CTL_HW, UNAME_HARDWARE_PLATFORM }; | 
|---|
|  | 177 | if (sysctl (mib, 2, hardware_platform, &s, 0, 0) >= 0) | 
|---|
|  | 178 | +#endif | 
|---|
|  | 179 | element = hardware_platform; | 
|---|
|  | 180 | } | 
|---|
|  | 181 | #endif | 
|---|