Commit: 349bb27a6c672772a1148e859299bac79f5e218c
Parent: 68d08191462ef969f191ac7f8b46ff8b78d23a2e
Author: Randy Palamar
Date: Tue, 18 Mar 2025 17:17:00 -0600
util: add stream_reset and stream_commit helpers
Diffstat:
6 files changed, 34 insertions(+), 22 deletions(-)
diff --git a/beamformer.c b/beamformer.c
@@ -158,7 +158,7 @@ alloc_shader_storage(BeamformerCtx *ctx, Arena a)
stream_append_u64(&label, i);
s8 rf_label = stream_to_s8(&label);
LABEL_GL_OBJECT(GL_BUFFER, cs->rf_data_ssbos[i], rf_label);
- label.widx = s_widx;
+ stream_reset(&label, s_widx);
}
i32 map_flags = GL_MAP_WRITE_BIT|GL_MAP_PERSISTENT_BIT|GL_MAP_UNSYNCHRONIZED_BIT;
@@ -461,7 +461,7 @@ compile_shader(Platform *platform, Arena a, u32 type, s8 shader, s8 name)
i32 len = 0, out_len = 0;
glGetShaderiv(sid, GL_INFO_LOG_LENGTH, &len);
glGetShaderInfoLog(sid, len, &out_len, (char *)(buf.data + buf.widx));
- buf.widx += out_len;
+ stream_commit(&buf, out_len);
glDeleteShader(sid);
platform->write_file(platform->error_file_handle, stream_to_s8(&buf));
@@ -484,7 +484,7 @@ link_program(Platform *platform, Arena a, u32 shader_id)
Stream buf = arena_stream(&a);
stream_append_s8(&buf, s8("shader link error: "));
glGetProgramInfoLog(result, buf.cap - buf.widx, &len, (c8 *)(buf.data + buf.widx));
- buf.widx = len;
+ stream_reset(&buf, len);
stream_append_byte(&buf, '\n');
platform->write_file(platform->error_file_handle, stream_to_s8(&buf));
glDeleteProgram(result);
diff --git a/main_linux.c b/main_linux.c
@@ -48,10 +48,10 @@ dispatch_file_watch_events(Platform *platform, Arena arena)
stream_append_byte(&path, '/');
stream_append_s8(&path, file);
stream_append_byte(&path, 0);
- path.widx--;
+ stream_commit(&path, -1);
fw->callback(platform, stream_to_s8(&path),
fw->user_data, arena);
- path.widx = 0;
+ stream_reset(&path, 0);
break;
}
}
diff --git a/main_w32.c b/main_w32.c
@@ -49,7 +49,7 @@ dispatch_file_watch(Platform *platform, FileWatchDirectory *fw_dir, u8 *buf, Are
Stream path = {.data = arena_commit(&arena, KB(1)), .cap = KB(1)};
if (fni->action != FILE_ACTION_MODIFIED) {
- path.widx = 0;
+ stream_reset(&path, 0);
stream_append_s8(&path, s8("unknown file watch event: "));
stream_append_u64(&path, fni->action);
stream_append_byte(&path, '\n');
@@ -63,7 +63,7 @@ dispatch_file_watch(Platform *platform, FileWatchDirectory *fw_dir, u8 *buf, Are
.len = fni->filename_size / 2});
stream_append_s8(&path, file_name);
stream_append_byte(&path, 0);
- path.widx--;
+ stream_commit(&path, -1);
u64 hash = s8_hash(file_name);
for (u32 i = 0; i < fw_dir->file_watch_count; i++) {
@@ -126,7 +126,7 @@ poll_pipe(Pipe *p, Stream *e)
stream_append_i64(e, GetLastError());
stream_append_byte(e, '\n');
os_write_err_msg(stream_to_s8(e));
- e->widx = 0;
+ stream_reset(e, 0);
}
}
}
diff --git a/os_win32.c b/os_win32.c
@@ -132,8 +132,8 @@ os_get_module(char *name, Stream *e)
static PLATFORM_WRITE_FILE_FN(os_write_file)
{
- i32 wlen;
- WriteFile(file, raw.data, raw.len, &wlen, 0);
+ i32 wlen = 0;
+ if (raw.len) WriteFile(file, raw.data, raw.len, &wlen, 0);
return raw.len == wlen;
}
diff --git a/static.c b/static.c
@@ -33,10 +33,9 @@ static FILE_WATCH_CALLBACK_FN(debug_reload)
DEBUG_ENTRY_POINTS
#undef X
- if (err.widx)
- os_write_err_msg(stream_to_s8(&err));
+ stream_append_s8(&err, s8("Reloaded Main Executable\n"));
+ os_write_err_msg(stream_to_s8(&err));
- os_write_err_msg(s8("Reloaded Main Executable\n"));
input->executable_reloaded = 1;
return 1;
@@ -63,8 +62,7 @@ debug_init(Platform *p, iptr input, Arena *arena)
}
}
- if (err.widx)
- os_write_err_msg(stream_to_s8(&err));
+ os_write_err_msg(stream_to_s8(&err));
}
#endif /* _DEBUG */
@@ -88,7 +86,7 @@ gl_debug_logger(u32 src, u32 type, u32 id, u32 lvl, i32 len, const char *msg, co
stream_append(e, (char *)msg, len);
stream_append_byte(e, '\n');
os_write_err_msg(stream_to_s8(e));
- e->widx = 0;
+ stream_reset(e, 0);
}
static void
@@ -176,8 +174,7 @@ dump_gl_params(GLParams *gl, Arena a)
stream_append_s8(&s, s8("\nMax Server Wait Time [ns]: "));
stream_append_i64(&s, gl->max_server_wait_time);
stream_append_s8(&s, s8("\n-----------------------\n"));
- if (!s.errors)
- os_write_err_msg(stream_to_s8(&s));
+ os_write_err_msg(stream_to_s8(&s));
#endif
}
@@ -231,17 +228,16 @@ static FILE_WATCH_CALLBACK_FN(load_cuda_lib)
CudaLib *cl = (CudaLib *)user_data;
b32 result = os_file_exists((c8 *)path.data);
if (result) {
- os_write_err_msg(s8("loading CUDA lib: " OS_CUDA_LIB_NAME "\n"));
-
Stream err = arena_stream(&tmp);
+
+ stream_append_s8(&err, s8("loading CUDA lib: " OS_CUDA_LIB_NAME "\n"));
os_unload_library(cl->lib);
cl->lib = os_load_library((c8 *)path.data, OS_CUDA_LIB_TEMP_NAME, &err);
#define X(name) cl->name = os_lookup_dynamic_symbol(cl->lib, #name, &err);
CUDA_LIB_FNS
#undef X
- if (err.widx)
- os_write_err_msg(stream_to_s8(&err));
+ os_write_err_msg(stream_to_s8(&err));
}
#define X(name) if (!cl->name) cl->name = name ## _stub;
diff --git a/util.c b/util.c
@@ -190,6 +190,22 @@ stream_to_s8(Stream *s)
}
static void
+stream_reset(Stream *s, size index)
+{
+ s->errors = s->cap <= index;
+ if (!s->errors)
+ s->widx = index;
+}
+
+static void
+stream_commit(Stream *s, size count)
+{
+ s->errors |= BETWEEN(s->widx + count, 0, s->cap);
+ if (!s->errors)
+ s->widx += count;
+}
+
+static void
stream_append(Stream *s, void *data, size count)
{
s->errors |= (s->cap - s->widx) < count;