diff options
author | Runxi Yu <me@runxiyu.org> | 2025-01-04 19:54:43 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-01-04 19:54:43 +0800 |
commit | e140786e35c5d64d5fa0d4bd64df1a44940b6be3 (patch) | |
tree | eca891334dd7b00a2e260d6dfbc7f29203629fae /misc/misc.go | |
parent | Fix the README (diff) | |
download | go-lindenii-common-e140786e35c5d64d5fa0d4bd64df1a44940b6be3.tar.gz go-lindenii-common-e140786e35c5d64d5fa0d4bd64df1a44940b6be3.tar.zst go-lindenii-common-e140786e35c5d64d5fa0d4bd64df1a44940b6be3.zip |
misc: Add Openat2
Diffstat (limited to 'misc/misc.go')
-rw-r--r-- | misc/misc.go | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/misc/misc.go b/misc/misc.go index 5526797..572651f 100644 --- a/misc/misc.go +++ b/misc/misc.go @@ -1,8 +1,30 @@ // Package misc provides miscellaneous functions. package misc +import ( + "errors" + "strings" +) + +// Copy_map the map src to dst without clearing existing items in dst. func Copy_map[K comparable, V any](dst map[K]V, src map[K]V) { for k, v := range src { dst[k] = v } } + +// String_to_byte_ptr returns a pointer to the first byte of a string. It +// ensures that the returned pointer is null-terminated. +func String_to_byte_ptr(s string) (*byte, error) { + // If the string already contains a null then whoever attempts to + // interpret this as a null-terminated string won't be able to see the + // whole string. This is probably not expected by the caller. + if strings.IndexByte(s, 0) != -1 { + return nil, Err_null_byte + } + buf := make([]byte, len(s)+1) // Zeros them out... + copy(buf, s) // ... so the last byte would be null. + return &buf[0], nil +} + +var Err_null_byte = errors.New("string contains null byte") |