From 53abfa7ea1ef7ea1b9e47ca9818e48ab0fa32b8b Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 26 Oct 2018 09:54:29 +0200 Subject: [PATCH] Add sys$gethostname and /bin/hostname --- AK/String.cpp | 12 ++++++++++++ AK/String.h | 2 ++ Kernel/Syscall.cpp | 2 ++ Kernel/Syscall.h | 1 + Kernel/Task.cpp | 20 ++++++++++++++++++++ Kernel/Task.h | 1 + Kernel/_fs_contents | Bin 1024000 -> 1024000 bytes Kernel/errno.h | 3 ++- Kernel/sync-sh | 1 + LibC/errno.h | 38 +------------------------------------- LibC/string.cpp | 1 + LibC/unistd.cpp | 6 ++++++ LibC/unistd.h | 3 +++ Userland/.gitignore | 1 + Userland/Makefile | 9 +++++++-- Userland/hostname.cpp | 17 +++++++++++++++++ 16 files changed, 77 insertions(+), 40 deletions(-) create mode 100644 Userland/hostname.cpp diff --git a/AK/String.cpp b/AK/String.cpp index 201bc8d7c1..e589438c1b 100644 --- a/AK/String.cpp +++ b/AK/String.cpp @@ -22,6 +22,18 @@ String String::empty() return StringImpl::theEmptyStringImpl(); } +String String::isolatedCopy() const +{ + if (!m_impl) + return { }; + if (!m_impl->length()) + return empty(); + char* buffer; + auto impl = StringImpl::createUninitialized(length(), buffer); + memcpy(buffer, m_impl->characters(), m_impl->length()); + return String(move(*impl)); +} + String String::substring(size_t start, size_t length) const { ASSERT(m_impl); diff --git a/AK/String.h b/AK/String.h index 96a193a331..8c9984c785 100644 --- a/AK/String.h +++ b/AK/String.h @@ -69,6 +69,8 @@ public: bool operator==(const String&) const; bool operator!=(const String& other) const { return !(*this == other); } + String isolatedCopy() const; + static String empty(); StringImpl* impl() { return m_impl.ptr(); } diff --git a/Kernel/Syscall.cpp b/Kernel/Syscall.cpp index 4524f72682..df6fe77662 100644 --- a/Kernel/Syscall.cpp +++ b/Kernel/Syscall.cpp @@ -100,6 +100,8 @@ DWORD handle(DWORD function, DWORD arg1, DWORD arg2, DWORD arg3) return (dword)current->sys$mmap((void*)arg1, (size_t)arg2); case Syscall::PosixMunmap: return current->sys$munmap((void*)arg1, (size_t)arg2); + case Syscall::PosixGethostname: + return current->sys$gethostname((char*)arg1, (size_t)arg2); case Syscall::PosixExit: cli(); locker.unlock(); diff --git a/Kernel/Syscall.h b/Kernel/Syscall.h index 3569c91f44..1c704b2fff 100644 --- a/Kernel/Syscall.h +++ b/Kernel/Syscall.h @@ -30,6 +30,7 @@ enum Function { PosixLstat = 0x1998, PosixGetcwd = 0x1999, PosixGettimeofday = 0x2000, + PosixGethostname = 0x2001, }; void initialize(); diff --git a/Kernel/Task.cpp b/Kernel/Task.cpp index 28ed1981a1..b505de76fc 100644 --- a/Kernel/Task.cpp +++ b/Kernel/Task.cpp @@ -24,6 +24,13 @@ Task* s_kernelTask; static pid_t next_pid; static InlineLinkedList* s_tasks; static InlineLinkedList* s_deadTasks; +static String* s_hostname; + +static String& hostname(InterruptDisabler&) +{ + ASSERT(s_hostname); + return *s_hostname; +} static bool contextSwitch(Task*); @@ -61,6 +68,7 @@ void Task::initialize() s_tasks = new InlineLinkedList; s_deadTasks = new InlineLinkedList; s_kernelTask = Task::createKernelTask(nullptr, "colonel"); + s_hostname = new String("birx"); redoKernelTaskTSS(); loadTaskRegister(s_kernelTask->selector()); } @@ -167,6 +175,18 @@ int Task::sys$munmap(void* addr, size_t size) return 0; } +int Task::sys$gethostname(char* buffer, size_t size) +{ + String hn; + { + InterruptDisabler disabler; + hn = hostname(disabler).isolatedCopy(); + } + if (size < (hn.length() + 1)) + return -ENAMETOOLONG; + memcpy(buffer, hn.characters(), size); +} + int Task::sys$spawn(const char* path) { int error = 0; diff --git a/Kernel/Task.h b/Kernel/Task.h index 3f855f6d2e..6cf40481b3 100644 --- a/Kernel/Task.h +++ b/Kernel/Task.h @@ -100,6 +100,7 @@ public: int sys$getcwd(char*, size_t); int sys$sleep(unsigned seconds); int sys$gettimeofday(timeval*); + int sys$gethostname(char* name, size_t length); static void initialize(); diff --git a/Kernel/_fs_contents b/Kernel/_fs_contents index 82f977dc26e266b38909d1dcec039b37831c8315..7ee095bf0e7966552f5d9161a425b8eaa1115ca9 100644 GIT binary patch delta 18796 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 delta 7021 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 #define __RETURN_WITH_ERRNO(rc, good_ret, bad_ret) \ do { \ diff --git a/LibC/string.cpp b/LibC/string.cpp index 94b4450249..06e28676e4 100644 --- a/LibC/string.cpp +++ b/LibC/string.cpp @@ -50,6 +50,7 @@ const char* strerror(int errnum) case EPIPE: return "Broken pipe"; case EDOM: return "Math argument out of domain"; case ERANGE: return "Math result not representable"; + case ENAMETOOLONG: return "Name too long"; case EOVERFLOW: return "Value too large for data type"; } printf("strerror() missing string for errnum=%d\n", errnum); diff --git a/LibC/unistd.cpp b/LibC/unistd.cpp index 82077c5a52..8a39d7f085 100644 --- a/LibC/unistd.cpp +++ b/LibC/unistd.cpp @@ -62,5 +62,11 @@ int sleep(unsigned seconds) return Syscall::invoke(Syscall::Sleep, (dword)seconds); } +int gethostname(char* buffer, size_t size) +{ + int rc = Syscall::invoke(Syscall::PosixGethostname, (dword)buffer, (dword)size); + __RETURN_WITH_ERRNO(rc, rc, -1); +} + } diff --git a/LibC/unistd.h b/LibC/unistd.h index 2f8f1b5c4e..42e61367ad 100644 --- a/LibC/unistd.h +++ b/LibC/unistd.h @@ -14,6 +14,9 @@ pid_t waitpid(pid_t); char* getcwd(char* buffer, size_t size); int lstat(const char* path, stat* statbuf); int sleep(unsigned seconds); +int gethostname(char*, size_t); + +#define HOST_NAME_MAX 64 #define S_IFMT 0170000 #define S_IFDIR 0040000 diff --git a/Userland/.gitignore b/Userland/.gitignore index b132ad73f0..ffdbff1187 100644 --- a/Userland/.gitignore +++ b/Userland/.gitignore @@ -7,4 +7,5 @@ sleep date false true +hostname *.o diff --git a/Userland/Makefile b/Userland/Makefile index 3631838c71..c5a8b4e209 100644 --- a/Userland/Makefile +++ b/Userland/Makefile @@ -7,7 +7,8 @@ OBJS = \ sleep.o \ date.o \ true.o \ - false.o + false.o \ + hostname.o APPS = \ id \ @@ -18,7 +19,8 @@ APPS = \ sleep \ date \ true \ - false + false \ + hostname ARCH_FLAGS = STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib @@ -65,6 +67,9 @@ true: true.o false: false.o $(LD) -o $@ $(LDFLAGS) $< ../LibC/LibC.a +hostname: hostname.o + $(LD) -o $@ $(LDFLAGS) $< ../LibC/LibC.a + .cpp.o: @echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $< diff --git a/Userland/hostname.cpp b/Userland/hostname.cpp new file mode 100644 index 0000000000..f33ca87c72 --- /dev/null +++ b/Userland/hostname.cpp @@ -0,0 +1,17 @@ +#include +#include +#include +#include + +int main(int c, char** v) +{ + char buffer[HOST_NAME_MAX]; + int rc = gethostname(buffer, sizeof(buffer)); + if (rc < 0) { + printf("gethostname() error: %s\n", strerror(errno)); + return 1; + } + printf("%s\n", buffer); + return 0; +} +