diff options
Diffstat (limited to 'testing/coreutils/coreutils-uname.patch')
-rw-r--r-- | testing/coreutils/coreutils-uname.patch | 173 |
1 files changed, 0 insertions, 173 deletions
diff --git a/testing/coreutils/coreutils-uname.patch b/testing/coreutils/coreutils-uname.patch deleted file mode 100644 index b458abeba..000000000 --- a/testing/coreutils/coreutils-uname.patch +++ /dev/null @@ -1,173 +0,0 @@ -On linux platforms, grok /proc/cpuinfo for the CPU/vendor info. - -Prob not suitable for upstream seeing as how it's 100% linux-specific -http://lists.gnu.org/archive/html/bug-coreutils/2005-09/msg00063.html - -Patch originally by Carlos E. Gorges <carlos@techlinux.com.br>, but -heavily reworked to suck less. - -To add support for additional platforms, check out the show_cpuinfo() -func in the linux/arch/<ARCH>/ source tree of the kernel. - ---- coreutils/src/uname.c -+++ coreutils/src/uname.c -@@ -50,6 +50,11 @@ - # include <mach-o/arch.h> - #endif - -+#if defined(__linux__) -+# define USE_PROCINFO -+# define UNAME_HARDWARE_PLATFORM -+#endif -+ - #include "system.h" - #include "error.h" - #include "quote.h" -@@ -138,6 +143,117 @@ - exit (status); - } - -+#if defined(USE_PROCINFO) -+ -+# if defined(__s390__) || defined(__s390x__) -+# define CPUINFO_FILE "/proc/sysinfo" -+# define CPUINFO_FORMAT "%64[^\t :]%*[ :]%256[^\n]%c" -+# else -+# define CPUINFO_FILE "/proc/cpuinfo" -+# define CPUINFO_FORMAT "%64[^\t:]\t:%256[^\n]%c" -+# endif -+ -+# define PROCINFO_PROCESSOR 0 -+# define PROCINFO_HARDWARE_PLATFORM 1 -+ -+static void __eat_cpuinfo_space(char *buf) -+{ -+ /* first eat trailing space */ -+ char *tmp = buf + strlen(buf) - 1; -+ while (tmp > buf && isspace(*tmp)) -+ *tmp-- = '\0'; -+ /* then eat leading space */ -+ tmp = buf; -+ while (*tmp && isspace(*tmp)) -+ tmp++; -+ if (tmp != buf) -+ memmove(buf, tmp, strlen(tmp)+1); -+ /* finally collapse whitespace */ -+ tmp = buf; -+ while (tmp[0] && tmp[1]) { -+ if (isspace(tmp[0]) && isspace(tmp[1])) { -+ memmove(tmp, tmp+1, strlen(tmp)); -+ continue; -+ } -+ ++tmp; -+ } -+} -+ -+static int __linux_procinfo(int x, char *fstr, size_t s) -+{ -+ FILE *fp; -+ -+ char *procinfo_keys[] = { -+ /* --processor --hardware-platform */ -+ #if defined(__alpha__) -+ "cpu model", "system type" -+ #elif defined(__arm__) -+ "Processor", "Hardware" -+ #elif defined(__avr32__) -+ "processor", "cpu family" -+ #elif defined(__bfin__) -+ "CPU", "BOARD Name" -+ #elif defined(__cris__) -+ "cpu", "cpu model" -+ #elif defined(__frv__) -+ "CPU-Core", "System" -+ #elif defined(__i386__) || defined(__x86_64__) -+ "model name", "vendor_id" -+ #elif defined(__ia64__) -+ "family", "vendor" -+ #elif defined(__hppa__) -+ "cpu", "model" -+ #elif defined(__m68k__) -+ "CPU", "MMU" -+ #elif defined(__mips__) -+ "cpu model", "system type" -+ #elif defined(__powerpc__) || defined(__powerpc64__) -+ "cpu", "machine" -+ #elif defined(__s390__) || defined(__s390x__) -+ "Type", "Manufacturer" -+ #elif defined(__sh__) -+ "cpu type", "machine" -+ #elif defined(sparc) || defined(__sparc__) -+ "type", "cpu" -+ #elif defined(__vax__) -+ "cpu type", "cpu" -+ #else -+ "unknown", "unknown" -+ #endif -+ }; -+ -+ if ((fp = fopen(CPUINFO_FILE, "r")) != NULL) { -+ char key[65], value[257], eol, *ret = NULL; -+ -+ while (fscanf(fp, CPUINFO_FORMAT, key, value, &eol) != EOF) { -+ __eat_cpuinfo_space(key); -+ if (!strcmp(key, procinfo_keys[x])) { -+ __eat_cpuinfo_space(value); -+ ret = value; -+ break; -+ } -+ if (eol != '\n') { -+ /* we need two fscanf's here in case the previous -+ * length limit caused us to read right up to the -+ * newline ... doing "%*[^\n]\n" wont eat the newline -+ */ -+ fscanf(fp, "%*[^\n]"); -+ fscanf(fp, "\n"); -+ } -+ } -+ fclose(fp); -+ -+ if (ret) { -+ strncpy(fstr, ret, s); -+ return 0; -+ } -+ } -+ -+ return -1; -+} -+ -+#endif -+ - /* Print ELEMENT, preceded by a space if something has already been - printed. */ - -@@ -250,10 +344,14 @@ main (int argc, char **argv) - if (toprint & PRINT_PROCESSOR) - { - char const *element = unknown; --#if HAVE_SYSINFO && defined SI_ARCHITECTURE -+#if ( HAVE_SYSINFO && defined SI_ARCHITECTURE ) || defined(USE_PROCINFO) - { - static char processor[257]; -+#if defined(USE_PROCINFO) -+ if (0 <= __linux_procinfo (PROCINFO_PROCESSOR, processor, sizeof processor)) -+#else - if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor)) -+#endif - element = processor; - } - #endif -@@ -306,9 +404,13 @@ main (int argc, char **argv) - if (element == unknown) - { - static char hardware_platform[257]; -+#if defined(USE_PROCINFO) -+ if (0 <= __linux_procinfo (PROCINFO_HARDWARE_PLATFORM, hardware_platform, sizeof hardware_platform)) -+#else - size_t s = sizeof hardware_platform; - static int mib[] = { CTL_HW, UNAME_HARDWARE_PLATFORM }; - if (sysctl (mib, 2, hardware_platform, &s, 0, 0) >= 0) -+#endif - element = hardware_platform; - } - #endif |