This commit is contained in:
snarmph 2026-07-06 11:30:24 +02:00
parent 144312744c
commit c10a3decd0
2 changed files with 33 additions and 15 deletions

44
colla.h
View file

@ -324,6 +324,8 @@ for_each (chunk, arr) {
(arr)->items[(arr)->count++] = (item); \ (arr)->items[(arr)->count++] = (item); \
} while (0) } while (0)
#define darr_pop(arr) if ((arr) && (arr)->count) --(arr)->count
// STRING TYPES ///////////////////////////////// // STRING TYPES /////////////////////////////////
#define STR_NONE SIZE_MAX #define STR_NONE SIZE_MAX
@ -487,6 +489,7 @@ usize strv_rfind_view(strview_t ctx, strview_t view, usize from_right);
bool char_is_space(char c); bool char_is_space(char c);
bool char_is_alpha(char c); bool char_is_alpha(char c);
bool char_is_num(char c); bool char_is_num(char c);
bool char_is_hex(char c);
char char_lower(char c); char char_lower(char c);
char char_upper(char c); char char_upper(char c);
@ -603,23 +606,23 @@ bool ibstr_get_i16(ibstream_t *ib, i16 *out);
bool ibstr_get_i32(ibstream_t *ib, i32 *out); bool ibstr_get_i32(ibstream_t *ib, i32 *out);
bool ibstr_get_i64(ibstream_t *ib, i64 *out); bool ibstr_get_i64(ibstream_t *ib, i64 *out);
// SIMPLE REGEX ///////////////////////////////// // REGEX ////////////////////////////////////////
// only supports *, every star matches until the following character // typedef struct rg_result_t rg_result_t;
// is found, e.g. // struct rg_result_t {
// ab*e // strview_t text;
// abcde // i64 offset;
// matches (cd) // };
//
// typedef struct rg_match_t rg_match_t;
// struct rg_match_t {
// rg_result_t matches[COLLA_RG_MAX_MATCHES];
// int count;
// bool found_match;
// };
typedef struct rg_match_t rg_match_t; bool rg_matches(strview_t rg, strview_t text);
struct rg_match_t { bool glob_matches(strview_t glob, strview_t text);
strview_t text[COLLA_RG_MAX_MATCHES];
int count;
bool matches;
};
rg_match_t rg_match(strview_t rg, strview_t text);
bool rg_match_easy(strview_t rg, strview_t text);
///////////////////////////////////////////////// /////////////////////////////////////////////////
@ -725,6 +728,7 @@ void os_abort(int code);
iptr os_get_last_error(void); iptr os_get_last_error(void);
// NOT thread safe // NOT thread safe
str_t os_get_error_string(iptr error); str_t os_get_error_string(iptr error);
str_t os_get_last_error_string(void);
// == HANDLE ==================================== // == HANDLE ====================================
@ -824,6 +828,12 @@ oshandle_t os_stdin(void);
// windows specific // windows specific
oshandle_t os_win_conout(void); oshandle_t os_win_conout(void);
oshandle_t os_win_conin(void); oshandle_t os_win_conin(void);
oshandle_t os_win_regopen(arena_t scratch, strview_t name);
void os_win_regclose(oshandle_t key);
str_t os_win_regread_str(arena_t *arena, oshandle_t key, strview_t value);
i64 os_win_regread_int(arena_t scratch, oshandle_t key, strview_t value);
str_t os_win_regkey_str(arena_t *arena, strview_t key, strview_t value);
#define print(...) fmt_print(__VA_ARGS__) #define print(...) fmt_print(__VA_ARGS__)
#define println(...) os_log_print(__FILE__, __LINE__, LOG_BASIC, __VA_ARGS__) #define println(...) os_log_print(__FILE__, __LINE__, LOG_BASIC, __VA_ARGS__)
@ -921,6 +931,7 @@ typedef strv_list_t os_cmd_t;
typedef struct os_cmd_options_t os_cmd_options_t; typedef struct os_cmd_options_t os_cmd_options_t;
struct os_cmd_options_t { struct os_cmd_options_t {
os_env_t *env; os_env_t *env;
bool quiet;
// redirected if !NULL // redirected if !NULL
oshandle_t *error; oshandle_t *error;
oshandle_t *out; oshandle_t *out;
@ -1035,6 +1046,8 @@ job_t *jq_pop_job(job_queue_t *queue);
// == ATOMICS ======================================== // == ATOMICS ========================================
#if !COLLA_NO_ATOMICS
i64 atomic_set_i64(i64 *dest, i64 val); i64 atomic_set_i64(i64 *dest, i64 val);
i64 atomic_add_i64(i64 *dest, i64 val); i64 atomic_add_i64(i64 *dest, i64 val);
i64 atomic_and_i64(i64 *dest, i64 val); i64 atomic_and_i64(i64 *dest, i64 val);
@ -1044,6 +1057,7 @@ i64 atomic_inc_i64(i64 *dest);
i64 atomic_dec_i64(i64 *dest); i64 atomic_dec_i64(i64 *dest);
i64 atomic_or_i64(i64 *dest, i64 val); i64 atomic_or_i64(i64 *dest, i64 val);
i64 atomic_xor_i64(i64 *dest, i64 val); i64 atomic_xor_i64(i64 *dest, i64 val);
#endif
// PARSERS ////////////////////////////////////// // PARSERS //////////////////////////////////////

View file

@ -29,6 +29,8 @@
#define ntohll(x) be64toh(x) #define ntohll(x) be64toh(x)
#endif #endif
void os__log_init(void);
strview_t os__fg_colours[LOG_COL__COUNT] = { strview_t os__fg_colours[LOG_COL__COUNT] = {
[LOG_COL_BLACK] = cstrv("\x1b[30m"), [LOG_COL_BLACK] = cstrv("\x1b[30m"),
[LOG_COL_BLUE] = cstrv("\x1b[34m"), [LOG_COL_BLUE] = cstrv("\x1b[34m"),
@ -132,6 +134,8 @@ void os_init(void) {
struct utsname name = {0}; struct utsname name = {0};
uname(&name); uname(&name);
lin_data.info.machine_name = str(&lin_data.arena, name.nodename); lin_data.info.machine_name = str(&lin_data.arena, name.nodename);
os__log_init();
} }
void os_cleanup(void) { void os_cleanup(void) {