// Package misc provides miscellaneous functions. package misc import ( "errors" "strings" ) // Pointerize_first returns the address of its first argument, and the value of // its second argument. This is useful to for taking the address of a function // that also has an error return value. func Pointerize_first[T1 any, T2 any](x1 T1, x2 T2) (*T1, T2) { return &x1, x2 } // 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")