commit 37dc9cbfdf01c7af51c09c1645d07de844c97ee1
parent 47b5c18d7c9d1e8f8872a16d4bb92e7cb994fff2
Author: Henry Wilson <henry@henryandlizzy.uk>
Date: Tue, 23 Dec 2025 00:33:53 +0000
introduce c_str for null-terminated strings
Diffstat:
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/linux.hpp b/linux.hpp
@@ -100,17 +100,34 @@ private:
int64_t val;
};
+struct c_str
+{
+ constexpr c_str(char const *p)
+ : str{p}
+ {}
+
+ template <size_t N>
+ constexpr c_str(char const (&arr)[N])
+ : str{arr}
+ {
+ static_assert(N > 0);
+ static_assert(arr[N-1] == '\0');
+ }
+private:
+ char const* str;
+};
+
[[noreturn]]
extern void exit(int error_code);
-extern syscall_result<size_t> read(file fd, char* data, size_t count);
+extern syscall_result<size_t> read(file fd, char data[], size_t count);
extern syscall_result<size_t> read(file fd, span<char> data);
-extern syscall_result<size_t> write(file fd, char const* data, size_t count);
+extern syscall_result<size_t> write(file fd, char const data[], size_t count);
extern syscall_result<size_t> write(file fd, span<char const> data);
extern syscall_result<size_t> write(file fd, span<span<char const> const> data);
-extern syscall_result<file> openat(int fd, char const* name, int flags, int mode);
+extern syscall_result<file> openat(int fd, c_str name, int flags, int mode);
extern syscall_result<void> close(file fd);
diff --git a/x86_64.s b/x86_64.s
@@ -76,5 +76,5 @@ extern getdents64
_syscall 217 syscall3
extern openat
-extern_alias _Z6openatiPKcii
+extern_alias _Z6openati5c_strii
_syscall 257 syscall6