os_read, ui misc
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user