Index: src/uname.c =================================================================== --- src/uname.c.orig 2010-01-01 14:06:47.000000000 +0100 +++ src/uname.c 2010-05-05 13:58:03.471359120 +0200 @@ -339,6 +339,36 @@ main (int argc, char **argv) # endif } #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 + } if (! (toprint == UINT_MAX && element == unknown)) print_element (element); } @@ -364,6 +394,18 @@ main (int argc, char **argv) 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; + } if (! (toprint == UINT_MAX && element == unknown)) print_element (element); }