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