summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsteven-na <noreply.github@stvnc.dev>2026-08-22 21:52:29 -0700
committersteven-na <noreply.github@stvnc.dev>2026-08-22 21:52:29 -0700
commitfd475232ee12089f817f237cc755fe4444ec483b (patch)
tree08bd147def56285c5420e852d0e3ff5dab7931e4 /src
parentfee3f00c6d8a855b4372a0367e0b3e9dcea76699 (diff)
Fixed va_list bug and strng_dup off by one
Diffstat (limited to 'src')
-rw-r--r--src/log.c45
-rw-r--r--src/smrt_arena.c19
-rw-r--r--src/string.h4
3 files changed, 40 insertions, 28 deletions
diff --git a/src/log.c b/src/log.c
index 670fbb5..c67b8b2 100644
--- a/src/log.c
+++ b/src/log.c
@@ -54,7 +54,7 @@ static inline void unlock() { if (L.lock_proc) L.lock_proc(false); }
static inline void write_to_file(LogLevelE lvl, const char *src_file, u64 src_line, const char *fmt, struct tm* time, va_list va) {
if (!L.log_file) { return; }
char time_str[64];
- time_str[strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", time)] = '\0';
+ strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", time);
fprintf(L.log_file, "%s [%-5s] %s:%lu ", time_str, level_strings[lvl], src_file, src_line);
vfprintf(L.log_file, fmt, va);
@@ -66,32 +66,37 @@ void log_log(LogLevelE lvl, const char *src_file, u64 src_line, const char *fmt,
lock();
- va_list va;
- va_list fva;
- va_start(va, fmt);
- va_copy(fva, va);
- va_end(va);
-
time_t t = time(NULL);
- struct tm* time = localtime(&t);
+ struct tm tm_info;
+ struct tm* time_ptr = localtime_r(&t, &tm_info);
- if (L.quiet || lvl < L.lvl) { goto skip; }
+ bool should_log_to_console = !(L.quiet || lvl < L.lvl);
- char time_str[16];
- time_str[strftime(time_str, sizeof(time_str), "%H:%M:%S", time)] = '\0';
+ va_list va;
+ va_start(va, fmt);
+
+ if (should_log_to_console) {
+ char time_str[16];
+ strftime(time_str, sizeof(time_str), "%H:%M:%S", time_ptr);
#ifndef LOG_NO_COLOR
- fprintf(L.log_default, "%s %s[%-5s] \x1b[0m\x1b[90m%s:%lu:\x1b[0m ",
- time_str, level_colors[lvl], level_strings[lvl], src_file, src_line);
+ fprintf(L.log_default, "%s %s[%-5s] \x1b[0m\x1b[90m%s:%lu:\x1b[0m ",
+ time_str, level_colors[lvl], level_strings[lvl], src_file, src_line);
#else
- fprintf(L.log_default, "%s %-5s %s:%lu: ",
- time_str, level_strings[L.lvl], src_file, src_line);
-#endif /* ifndef LOG_NO_COLOR */
+ fprintf(L.log_default, "%s %-5s %s:%lu: ",
+ time_str, level_strings[L.lvl], src_file, src_line);
+#endif
+
+ vfprintf(L.log_default, fmt, va);
+ fprintf(L.log_default, "\n");
+ }
+
+ va_list fva;
+ va_copy(fva, va);
+ va_end(va);
- vfprintf(L.log_default, fmt, va);
- fprintf(L.log_default, "\n");
+ write_to_file(lvl, src_file, src_line, fmt, time_ptr, fva);
+ va_end(fva);
-skip:
- write_to_file(lvl, src_file, src_line, fmt, time, fva);
unlock();
}
diff --git a/src/smrt_arena.c b/src/smrt_arena.c
index 055877d..b117473 100644
--- a/src/smrt_arena.c
+++ b/src/smrt_arena.c
@@ -1,3 +1,4 @@
+#include <stdint.h>
#if defined(__linux__)
#ifndef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
@@ -33,8 +34,8 @@ smrt_arena_t *smrt_arena_create(u64 reserve_size, u64 commit_size, b32 auto_deco
arena->auto_decommit = auto_decommit;
#ifndef NLOG_TRACE
- log_trace("Created smrt_arena; Total %lu bytes, Commit size %lu bytes",
- reserve_size, commit_size);
+ log_trace("Created smrt_arena %lu; Total %lu bytes, Commit size %lu bytes",
+ (uintptr_t)arena, reserve_size, commit_size);
#endif /* ifndef NLOG_TRACE */
return arena;
@@ -84,6 +85,11 @@ void *smrt_arena_push(smrt_arena_t *arena, u64 alloc_amount, b32 zero_out) {
return NULL;
}
+ #ifndef NLOG_TRACE
+ log_trace("Committed new memory on arena %lu to size %lu",
+ (uintptr_t)arena, arena->commit_size);
+ #endif /* ifndef NLOG_TRACE */
+
arena->commit_pos = new_commit_pos;
}
@@ -156,9 +162,10 @@ void smrt_arena_destroy(smrt_arena_t *arena) {
}
smrta_temp_t smrta_temp_start(smrt_arena_t *arena) {
- #ifndef NLOG_TRACE
- log_trace("Starting temp arena");
- #endif /* ifndef NLOG_TRACE */
+ #ifndef NLOG_TRACE
+ log_trace("Starting temp arena %lu at pos %lu", (uintptr_t)arena, arena->pos);
+ #endif /* ifndef NLOG_TRACE */
+
return (smrta_temp_t){
.arena=arena,
@@ -169,7 +176,7 @@ smrta_temp_t smrta_temp_start(smrt_arena_t *arena) {
void smrta_temp_end(smrta_temp_t temp) {
smrt_arena_pop_to(temp.arena, temp.start_pos);
#ifndef NLOG_TRACE
- log_trace("Ending temp arena");
+ log_trace("Ending temp arena %lu %lu->%lu", (uintptr_t)temp.arena, temp.start_pos, temp.arena->pos);
#endif /* ifndef NLOG_TRACE */
}
diff --git a/src/string.h b/src/string.h
index 9ff4978..ea4fd9b 100644
--- a/src/string.h
+++ b/src/string.h
@@ -40,8 +40,8 @@ static inline strng_view_t sv_from(strng_t const *string) {
return (strng_view_t){
.string=(char*)((u8*)string+STRNG_BASE_POS),
.start=0,
- .end=string->len,
- .max=string->len,
+ .end=string->len-1,
+ .max=string->len-1,
};
}