liblinux++

Log | Files | Refs

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:
Mlinux.hpp | 23++++++++++++++++++++---
Mx86_64.s | 2+-
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