From 1c45b28da6e74aeacace16817e6b7481a547a9e7 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 26 Oct 2018 14:56:21 +0200 Subject: [PATCH] Add sys$uname() and a /bin/uname utility. --- Kernel/Syscall.cpp | 2 ++ Kernel/Syscall.h | 1 + Kernel/Task.cpp | 28 +++++++++++++++++++-------- Kernel/Task.h | 1 + Kernel/_fs_contents | Bin 1024000 -> 1024000 bytes Kernel/sync-sh | 1 + Kernel/types.h | 10 ++++++++++ LibC/Makefile | 1 + LibC/stdio.cpp | 7 +++++++ LibC/stdio.h | 1 + LibC/utsname.cpp | 14 ++++++++++++++ LibC/utsname.h | 17 ++++++++++++++++ Userland/.gitignore | 1 + Userland/Makefile | 9 +++++++-- Userland/uname.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++ 15 files changed, 129 insertions(+), 10 deletions(-) create mode 100644 LibC/utsname.cpp create mode 100644 LibC/utsname.h create mode 100644 Userland/uname.cpp diff --git a/Kernel/Syscall.cpp b/Kernel/Syscall.cpp index 9af8c2fcef..5314418d5d 100644 --- a/Kernel/Syscall.cpp +++ b/Kernel/Syscall.cpp @@ -112,6 +112,8 @@ DWORD handle(DWORD function, DWORD arg1, DWORD arg2, DWORD arg3) return current->sys$get_arguments((int*)arg1, (char***)arg2); case Syscall::PosixChdir: return current->sys$chdir((const char*)arg1); + case Syscall::PosixUname: + return current->sys$uname((utsname*)arg1); default: kprintf("int0x80: Unknown function %x requested {%x, %x, %x}\n", function, arg1, arg2, arg3); break; diff --git a/Kernel/Syscall.h b/Kernel/Syscall.h index 9eb832e484..68a36ffd52 100644 --- a/Kernel/Syscall.h +++ b/Kernel/Syscall.h @@ -33,6 +33,7 @@ enum Function { PosixGethostname = 0x2001, GetArguments = 0x2002, PosixChdir = 0x2003, + PosixUname = 0x2004, }; void initialize(); diff --git a/Kernel/Task.cpp b/Kernel/Task.cpp index c26041d70a..b083698a94 100644 --- a/Kernel/Task.cpp +++ b/Kernel/Task.cpp @@ -26,12 +26,18 @@ static InlineLinkedList* s_tasks; static InlineLinkedList* s_deadTasks; static String* s_hostname; -static String& hostname(InterruptDisabler&) +static String& hostnameStorage(InterruptDisabler&) { ASSERT(s_hostname); return *s_hostname; } +static String getHostname() +{ + InterruptDisabler disabler; + return hostnameStorage(disabler).isolatedCopy(); +} + static bool contextSwitch(Task*); static void redoKernelTaskTSS() @@ -177,14 +183,10 @@ int Task::sys$munmap(void* addr, size_t size) int Task::sys$gethostname(char* buffer, size_t size) { - String hn; - { - InterruptDisabler disabler; - hn = hostname(disabler).isolatedCopy(); - } - if (size < (hn.length() + 1)) + auto hostname = getHostname(); + if (size < (hostname.length() + 1)) return -ENAMETOOLONG; - memcpy(buffer, hn.characters(), size); + memcpy(buffer, hostname.characters(), size); return 0; } @@ -760,6 +762,16 @@ int Task::sys$open(const char* path, size_t pathLength) return fd; } +int Task::sys$uname(utsname* buf) +{ + strcpy(buf->sysname, "Serenity"); + strcpy(buf->release, "1.0-dev"); + strcpy(buf->version, "FIXME"); + strcpy(buf->machine, "i386"); + strcpy(buf->nodename, getHostname().characters()); + return 0; +} + int Task::sys$kill(pid_t pid, int sig) { (void) sig; diff --git a/Kernel/Task.h b/Kernel/Task.h index c5a1362d14..b58b139c0c 100644 --- a/Kernel/Task.h +++ b/Kernel/Task.h @@ -104,6 +104,7 @@ public: int sys$gettimeofday(timeval*); int sys$gethostname(char* name, size_t length); int sys$get_arguments(int* argc, char*** argv); + int sys$uname(utsname*); static void initialize(); diff --git a/Kernel/_fs_contents b/Kernel/_fs_contents index c1123370d141b71a761f07c64b05f10bb6d5a45c..d31ada7ac0d95fd5b6b1f7bf87fb673a0670e9a6 100644 GIT binary patch delta 70745 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 BZc_jN delta 26543 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 RHW{8a8QwM-zGX7}EdW5Gl579~ diff --git a/Kernel/sync-sh b/Kernel/sync-sh index 922f07931c..f885e7ab18 100755 --- a/Kernel/sync-sh +++ b/Kernel/sync-sh @@ -11,5 +11,6 @@ cp ../Userland/true mnt/bin/true cp ../Userland/false mnt/bin/false cp ../Userland/hostname mnt/bin/hostname cp ../Userland/cat mnt/bin/cat +cp ../Userland/uname mnt/bin/uname umount mnt sync diff --git a/Kernel/types.h b/Kernel/types.h index ac5a4feedd..63f2a22846 100644 --- a/Kernel/types.h +++ b/Kernel/types.h @@ -31,6 +31,16 @@ struct timeval { suseconds_t tv_usec; }; +#define UTSNAME_ENTRY_LEN 65 + +struct utsname { + char sysname[UTSNAME_ENTRY_LEN]; + char nodename[UTSNAME_ENTRY_LEN]; + char release[UTSNAME_ENTRY_LEN]; + char version[UTSNAME_ENTRY_LEN]; + char machine[UTSNAME_ENTRY_LEN]; +}; + struct FarPtr { DWORD offset { 0 }; WORD selector { 0 }; diff --git a/LibC/Makefile b/LibC/Makefile index c958788553..956e01894a 100644 --- a/LibC/Makefile +++ b/LibC/Makefile @@ -7,6 +7,7 @@ OBJS = \ dirent.o \ stdlib.o \ time.o \ + utsname.o \ entry.o LIBRARY = LibC.a diff --git a/LibC/stdio.cpp b/LibC/stdio.cpp index 31f0d14d41..5ddb06b757 100644 --- a/LibC/stdio.cpp +++ b/LibC/stdio.cpp @@ -1,6 +1,8 @@ #include "stdio.h" #include "stdarg.h" #include "types.h" +#include "string.h" +#include "errno.h" #include #define ALWAYS_INLINE __attribute__ ((always_inline)) @@ -169,5 +171,10 @@ int sprintf(char* buffer, const char* fmt, ...) return ret; } +void perror(const char* s) +{ + printf("%s: %s\n", s, strerror(errno)); +} + } diff --git a/LibC/stdio.h b/LibC/stdio.h index b34e0828da..1e6a79ea71 100644 --- a/LibC/stdio.h +++ b/LibC/stdio.h @@ -5,6 +5,7 @@ extern "C" { int printf(const char* fmt, ...); int sprintf(char* buffer, const char* fmt, ...); int putchar(int ch); +void perror(const char*); } diff --git a/LibC/utsname.cpp b/LibC/utsname.cpp new file mode 100644 index 0000000000..d01232704a --- /dev/null +++ b/LibC/utsname.cpp @@ -0,0 +1,14 @@ +#include "utsname.h" +#include "errno.h" +#include + +extern "C" { + +int uname(struct utsname* buf) +{ + int rc = Syscall::invoke(Syscall::PosixUname, (dword)buf); + __RETURN_WITH_ERRNO(rc, rc, -1); +} + +} + diff --git a/LibC/utsname.h b/LibC/utsname.h new file mode 100644 index 0000000000..d50a5a4270 --- /dev/null +++ b/LibC/utsname.h @@ -0,0 +1,17 @@ +#pragma once + +#define UTSNAME_ENTRY_LEN 65 + +extern "C" { + +struct utsname { + char sysname[UTSNAME_ENTRY_LEN]; + char nodename[UTSNAME_ENTRY_LEN]; + char release[UTSNAME_ENTRY_LEN]; + char version[UTSNAME_ENTRY_LEN]; + char machine[UTSNAME_ENTRY_LEN]; +}; + +int uname(struct utsname*); + +} diff --git a/Userland/.gitignore b/Userland/.gitignore index 2c52d710f8..fd9204f785 100644 --- a/Userland/.gitignore +++ b/Userland/.gitignore @@ -10,3 +10,4 @@ false true hostname cat +uname diff --git a/Userland/Makefile b/Userland/Makefile index d433c7422d..9798053d6d 100644 --- a/Userland/Makefile +++ b/Userland/Makefile @@ -9,7 +9,8 @@ OBJS = \ true.o \ false.o \ hostname.o \ - cat.o + cat.o \ + uname.o APPS = \ id \ @@ -22,7 +23,8 @@ APPS = \ true \ false \ hostname \ - cat + cat \ + uname ARCH_FLAGS = STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib @@ -75,6 +77,9 @@ hostname: hostname.o cat: cat.o $(LD) -o $@ $(LDFLAGS) $< ../LibC/LibC.a +uname: uname.o + $(LD) -o $@ $(LDFLAGS) $< ../LibC/LibC.a + .cpp.o: @echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $< diff --git a/Userland/uname.cpp b/Userland/uname.cpp new file mode 100644 index 0000000000..f74cd7d3a5 --- /dev/null +++ b/Userland/uname.cpp @@ -0,0 +1,46 @@ +#include +#include + +int main(int argc, char** argv) +{ + utsname uts; + int rc = uname(&uts); + if (rc < 0) { + perror("uname() failed"); + return 0; + } + bool flag_s = false; + bool flag_n = false; + bool flag_r = false; + bool flag_m = false; + if (argc == 1) { + flag_s = true; + } else { + for (int i = 1; i < argc; ++i) { + if (argv[i][0] == '-') { + for (const char* o = &argv[i][1]; *o; ++o) { + switch (*o) { + case 's': flag_s = true; break; + case 'n': flag_n = true; break; + case 'r': flag_r = true; break; + case 'm': flag_m = true; break; + case 'a': flag_s = flag_n = flag_r = flag_m = true; break; + } + } + } + } + } + if (!flag_s && !flag_n && !flag_r && !flag_m) + flag_s = true; + if (flag_s) + printf("%s ", uts.sysname); + if (flag_n) + printf("%s ", uts.nodename); + if (flag_r) + printf("%s ", uts.release); + if (flag_m) + printf("%s ", uts.machine); + printf("\n"); + return 0; +} +