os_read, ui misc

This commit is contained in:
Krzosa Karol
2025-02-05 08:38:47 +01:00
parent 6f31de5bf1
commit 22685cbbd3
6 changed files with 88 additions and 11 deletions

View File

@@ -108,6 +108,34 @@ fn os_write_t os_write(s8_t path, s8_t content) {
return result;
}
// @todo: improve to return error codes
fn s8_t os_read(ma_arena_t *arena, s8_t path) {
s8_t result = {0};
ma_temp_t scratch = ma_begin_scratch1(arena);
s16_t path16 = s16_from_s8(scratch.arena, path);
HANDLE handle = CreateFileW(path16.str, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (handle != INVALID_HANDLE_VALUE) {
LARGE_INTEGER file_size;
if (GetFileSizeEx(handle, &file_size)) {
if (file_size.QuadPart != 0) {
result.len = file_size.QuadPart;
result.str = ma_push_array(arena, char, result.len + 1);
assert(result.len == (i64)(DWORD)result.len);
DWORD read;
if (ReadFile(handle, result.str, (DWORD)result.len, &read, NULL)) { // @todo: can only read 32 byte size files?
if (read == result.len) {
result.str[result.len] = 0;
}
}
}
}
CloseHandle(handle);
}
ma_end_scratch(scratch);
return result;
}
typedef struct w32_file_iter_t w32_file_iter_t;
struct w32_file_iter_t {
HANDLE handle;