Skip to content

Commit

Permalink
Add OpenSUSE fixes for the uname builtin on Linux
Browse files Browse the repository at this point in the history
  • Loading branch information
McDutchie committed Feb 2, 2021
1 parent 0e4c4d6 commit 8a58166
Showing 1 changed file with 50 additions and 5 deletions.
55 changes: 50 additions & 5 deletions src/lib/libcmd/uname.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,16 +79,15 @@ __STDPP__directive pragma pp:hide getdomainname gethostid gethostname sethostnam

#include <cmd.h>
#include <ctype.h>
#include <stdio.h>
#include <proc.h>

#include "FEATURE/utsname"

#define MAXHOSTNAME 64

#if _lib_uname && _sys_utsname

#include <sys/utsname.h>

# include <sys/utsname.h>
#endif

#if defined(__STDPP__directive) && defined(__STDPP__hide)
Expand Down Expand Up @@ -269,6 +268,9 @@ b_uname(int argc, char** argv, Shbltin_t* context)
{
case 'a':
flags |= OPT_all|((1L<<OPT_ALL)-1);
#ifdef __linux__
flags |= OPT_implementation;
#endif
continue;
case 'b':
flags |= OPT_base;
Expand Down Expand Up @@ -394,13 +396,56 @@ b_uname(int argc, char** argv, Shbltin_t* context)
output(OPT_machine, ut.machine, "machine");
if (flags & OPT_processor)
{
if (!*(s = astconf("ARCHITECTURE", NiL, NiL)))
s = NULL;
#ifdef __linux__
# ifdef UNAME_PROCESSOR
if (!s)
{
size_t len = sizeof(buf) - 1;
int ctl[] = {CTL_HW, UNAME_PROCESSOR};
if (sysctl(ctl, 2, buf, &len, 0, 0) == 0)
s = buf;
}
# endif
if (!s)
{
strcpy((s = buf), ut.machine);
if (strcmp(s, "i686") == 0)
{
char line[1024];
Sfio_t *io = sfopen((Sfio_t*)0, "/proc/cpuinfo", "r");
if (io)
{
while (fgets(line, sizeof(line), io) > 0)
{
if (strncmp(line, "vendor_id", 9) == 0)
{
if (strstr(line, "AuthenticAMD"))
s = "athlon";
break;
}
}
sfclose(io);
}
}
}
#endif
if (!s && !*(s = astconf("ARCHITECTURE", NiL, NiL)))
s = ut.machine;
output(OPT_processor, s, "processor");
}
if (flags & OPT_implementation)
{
if (!*(s = astconf("PLATFORM", NiL, NiL)) && !*(s = astconf("HW_NAME", NiL, NiL)))
s = NULL;
#ifdef __linux__
if (!s)
{
strcpy((s = buf), ut.machine);
if (s[0] == 'i' && s[2] == '8' && s[3] == '6' && s[4] == '\0')
s[1] = '3';
}
#endif
if (!s && !*(s = astconf("PLATFORM", NiL, NiL)) && !*(s = astconf("HW_NAME", NiL, NiL)))
{
if (t = strchr(hosttype, '.'))
t++;
Expand Down

0 comments on commit 8a58166

Please sign in to comment.