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 201bc8d7c12..e589438c1bc 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 96a193a331c..8c9984c7851 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 4524f726823..df6fe77662e 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 3569c91f44f..1c704b2fff8 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 28ed1981a11..b505de76fc8 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 3f855f6d2e4..6cf40481b36 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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 diff --git a/Kernel/errno.h b/Kernel/errno.h index e01e73798ae..6b321a05f12 100644 --- a/Kernel/errno.h +++ b/Kernel/errno.h @@ -34,5 +34,6 @@ #define EPIPE 32 // Broken pipe #define EDOM 33 // Math argument out of domain of func #define ERANGE 34 // Math result not representable +#define ENAMETOOLONG 36 // Name too long -#define EOVERFLOW 75 // Value too large for defined data type +#define EOVERFLOW 75 // Value too large for defined data type diff --git a/Kernel/sync-sh b/Kernel/sync-sh index 8b8b687be38..24ba204577f 100755 --- a/Kernel/sync-sh +++ b/Kernel/sync-sh @@ -9,5 +9,6 @@ cp ../Userland/sleep mnt/bin/sleep cp ../Userland/date mnt/bin/date cp ../Userland/true mnt/bin/true cp ../Userland/false mnt/bin/false +cp ../Userland/hostname mnt/bin/hostname umount mnt sync diff --git a/LibC/errno.h b/LibC/errno.h index 5f4a403f5ad..c28cb71f243 100644 --- a/LibC/errno.h +++ b/LibC/errno.h @@ -1,42 +1,6 @@ #pragma once -#define EPERM 1 // Operation not permitted -#define ENOENT 2 // No such file or directory -#define ESRCH 3 // No such process -#define EINTR 4 // Interrupted system call -#define EIO 5 // I/O error -#define ENXIO 6 // No such device or address -#define E2BIG 7 // Argument list too long -#define ENOEXEC 8 // Exec format error -#define EBADF 9 // Bad file number -#define ECHILD 10 // No child processes -#define EAGAIN 11 // Try again -#define ENOMEM 12 // Out of memory -#define EACCES 13 // Permission denied -#define EFAULT 14 // Bad address -#define ENOTBLK 15 // Block device required -#define EBUSY 16 // Device or resource busy -#define EEXIST 17 // File exists -#define EXDEV 18 // Cross-device link -#define ENODEV 19 // No such device -#define ENOTDIR 20 // Not a directory -#define EISDIR 21 // Is a directory -#define EINVAL 22 // Invalid argument -#define ENFILE 23 // File table overflow -#define EMFILE 24 // Too many open files -#define ENOTTY 25 // Not a typewriter -#define ETXTBSY 26 // Text file busy -#define EFBIG 27 // File too large -#define ENOSPC 28 // No space left on device -#define ESPIPE 29 // Illegal seek -#define EROFS 30 // Read-only file system -#define EMLINK 31 // Too many links -#define EPIPE 32 // Broken pipe -#define EDOM 33 // Math argument out of domain of func -#define ERANGE 34 // Math result not representable - -#define EOVERFLOW 75 // Value too large for defined data type - +#include #define __RETURN_WITH_ERRNO(rc, good_ret, bad_ret) \ do { \ diff --git a/LibC/string.cpp b/LibC/string.cpp index 94b44502491..06e28676e4b 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 82077c5a527..8a39d7f085b 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 2f8f1b5c4e6..42e61367ad0 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 b132ad73f04..ffdbff11874 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 3631838c712..c5a8b4e2097 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 00000000000..f33ca87c72c --- /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; +} +