ksh/ksh93-uname.dif
2013-02-05 17:51:33 +00:00

129 lines
3.3 KiB
Plaintext

--- src/lib/libcmd/date.c
+++ src/lib/libcmd/date.c 2007-03-30 10:51:14.000000000 +0000
@@ -226,10 +226,19 @@ settime(Shbltin_t* context, const char*
if (!adjust && !network)
return tmxsettime(now);
argv = args;
+#ifdef __linux__
+ s = "/bin/date";
+#else
s = "/usr/bin/date";
+#endif
if (!streq(cmd, s) && (!eaccess(s, X_OK) || !eaccess(s+=4, X_OK)))
{
*argv++ = s;
+#ifdef __linux__
+ tmxfmt(buf, sizeof(buf), "%m%d%H" "%M%Y.%S", now);
+ if (tm_info.flags & TM_UTC)
+ *argv++ = "--utc";
+#else
if (streq(astconf("UNIVERSE", NiL, NiL), "att"))
{
tmxfmt(buf, sizeof(buf), "%m%d%H" "%M%Y.%S", now);
@@ -244,6 +253,7 @@ settime(Shbltin_t* context, const char*
if (tm_info.flags & TM_UTC)
*argv++ = "-u";
}
+#endif
*argv++ = buf;
*argv = 0;
if (!sh_run(context, argv - args, args))
--- src/lib/libcmd/uname.c
+++ src/lib/libcmd/uname.c 2007-03-28 16:38:01.000000000 +0000
@@ -79,6 +79,7 @@ __STDPP__directive pragma pp:hide getdom
#include <cmd.h>
#include <ctype.h>
+#include <stdio.h>
#include <proc.h>
#include "FEATURE/utsname"
@@ -86,9 +87,11 @@ __STDPP__directive pragma pp:hide getdom
#define MAXHOSTNAME 64
#if _lib_uname && _sys_utsname
+# include <sys/utsname.h>
+#endif
-#include <sys/utsname.h>
-
+#ifdef __linux__
+# include <sys/sysctl.h>
#endif
#if defined(__STDPP__directive) && defined(__STDPP__hide)
@@ -269,6 +272,9 @@ b_uname(int argc, char** argv, Shbltin_t
{
case 'a':
flags |= OPT_all|((1L<<OPT_ALL)-1);
+#ifdef __linux__
+ flags |= OPT_implementation;
+#endif
continue;
case 'b':
flags |= OPT_base;
@@ -325,7 +331,11 @@ b_uname(int argc, char** argv, Shbltin_t
sethost = opt_info.arg;
continue;
case ':':
+#ifdef __linux__
+ s = "/bin/uname";
+#else
s = "/usr/bin/uname";
+#endif
if (!streq(argv[0], s) && (!eaccess(s, X_OK) || !eaccess(s+=4, X_OK)))
{
argv[0] = s;
@@ -394,13 +404,49 @@ b_uname(int argc, char** argv, Shbltin_t
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++;