--- coreutils-5.1.0/src/uname.c +++ coreutils-5.1.0/src/uname.c @@ -260,6 +260,36 @@ element = processor; } #endif + if (element == unknown) + { + struct utsname name; + static char processor[sizeof (name.machine)]; + if (uname (&name) != 0) + error (EXIT_FAILURE, errno, _("cannot get system name")); + strcpy (processor, name.machine); + element = processor; +#ifdef __linux__ + if (!strcmp (element, "i686")) + { + /* Check for Athlon */ + char line[1024]; + FILE *f = fopen ("/proc/cpuinfo", "r"); + if (f) + { + while (fgets (line, sizeof (line), f) > 0) + { + if (strncmp (line, "vendor_id", 9) == 0) + { + if (strstr (line, "AuthenticAMD")) + element = "athlon"; + break; + } + } + fclose (f); + } + } +#endif + } print_element (element); } @@ -284,6 +314,18 @@ element = hardware_platform; } #endif + if (element == unknown) + { + struct utsname name; + static char hardware_platform[sizeof (name.machine)]; + if (uname (&name) != 0) + error (EXIT_FAILURE, errno, _("cannot get system name")); + strcpy (hardware_platform, name.machine); + if (hardware_platform[0] == 'i' && hardware_platform[2] == '8' + && hardware_platform[3] == '6' && hardware_platform[4] == 0) + hardware_platform[1] = '3'; + element = hardware_platform; + } print_element (element); }