main
 1#ifndef KC_HEADER_TYPES_STRING_INCLUDED
 2#define KC_HEADER_TYPES_STRING_INCLUDED
 3
 4#include "../platform/types.h"
 5#include "../memory/arenas.h"
 6
 7typedef struct _string {
 8	u64 len;
 9	u8 data[];
10} string;
11
12
13#define STATIC_STRING( varname, str )                                          \
14	const struct {                                                            \
15		u64 len;                                                             \
16		u8  data[sizeof( str ) - 1] __attribute__( ( nonstring ) );          \
17	} varname = { .len = sizeof( str ) - 1, .data = str }
18
19status string_to_cstring( const string *str, Arena *a, u8** out );
20
21#ifdef KC_IMPLEMENT
22
23status string_to_cstring( const string *str, Arena *a, u8** out ) {
24	u8* c_str;
25	u64 l = str->len;
26
27	PROPAGATE_ERROR(Arena_take( a, u8, l + 1, &c_str ));
28	mem_copy( &str->data[0], c_str, l );
29	c_str[l] = '\0';
30
31	*out = c_str;
32	return STATUS_SUCCESS;
33}
34
35#endif
36
37
38#endif