i64 -> u64 + osFileXXX() works on both linux and mac I think

This commit is contained in:
Tenari
2026-04-10 07:46:09 -05:00
parent ae8d1431b6
commit 60330da767
4 changed files with 119 additions and 118 deletions
+117 -1
View File
@@ -99,7 +99,7 @@ fn Dim2 osGetTerminalDimensions() {
return result;
}
void osBlitToTerminal(ptr writeable_output_ansi_string, i64 count) {
void osBlitToTerminal(ptr writeable_output_ansi_string, u64 count) {
int flags = fcntl(STDOUT_FILENO, F_GETFL);
fcntl(STDOUT_FILENO, F_SETFL, flags & ~O_NONBLOCK);
@@ -157,3 +157,119 @@ i32 osLanIPAddress() { // returns as HOST byte-order
}
return result;
}
// Files
fn bool osFileExists(String filename) {
bool result = access((str)filename.bytes, F_OK) == 0;
return result;
}
fn String osFileRead(Arena* arena, ptr filepath) {
struct stat st;
stat(filepath, &st);
String result = { st.st_size, st.st_size, 0 };
result.bytes = arenaAlloc(arena, st.st_size);
size_t handle = open(filepath, O_RDWR, S_IRUSR | S_IRGRP | S_IROTH);
read(handle, result.bytes, st.st_size);
close(handle);
return result;
}
fn bool osFileCreate(String filename) {
/*
M_Scratch scratch = scratch_get();
string nt = str_copy(&scratch.arena, filename);
bool result = true;
size_t handle = open((const char*) nt.str, O_RDWR | O_CREAT, S_IRUSR | S_IRGRP | S_IROTH);
if (handle == -1) {
result = false;
}
scratch_return(&scratch);
close(handle);
return true;
*/
bool result = true;
size_t handle = open((str)filename.bytes, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
if (handle == -1) {
result = false;
}
if (close(handle) == -1) {
result = false;
}
return result;
}
fn bool osFileCreateWrite(String filename, String data) {
/*
M_Scratch scratch = scratch_get();
string nt = str_copy(&scratch.arena, filename);
b32 result = true;
size_t handle =
open((const char*) nt.str, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IRGRP | S_IROTH);
if (handle == -1) result = false;
write(handle, data.str, data.size);
close(handle);
scratch_return(&scratch);
return result;
*/
bool result = true;
size_t handle = open(
(str)filename.bytes,
O_RDWR | O_CREAT | O_TRUNC,
S_IRUSR | S_IRGRP | S_IROTH
);
if (handle == -1) result = false;
write(handle, data.bytes, data.length);
close(handle);
return result;
}
fn bool osFileWrite(String filename, String data) {
/*
M_Scratch scratch = scratch_get();
string nt = str_copy(&scratch.arena, filename);
b32 result = true;
size_t handle =
open((const char*) nt.str, O_RDWR | O_TRUNC, S_IRUSR | S_IRGRP | S_IROTH);
if (handle == -1) result = false;
write(handle, data.str, data.size);
close(handle);
*/
bool result = true;
size_t handle = open((str) filename.bytes, O_RDWR | O_TRUNC, S_IRUSR | S_IRGRP | S_IROTH);
if (handle == -1) result = false;
write(handle, data.bytes, data.length);
close(handle);
return result;
}
fn Resulti64 osFileOpenForWriting(String filename) {
size_t handle = open((str)filename.bytes, O_WRONLY | O_APPEND, S_IRUSR | S_IRGRP | S_IROTH);
Resulti64 result = {
.success = handle != -1,
.value = (i64)handle,
};
return result;
}
fn Resulti64 osFileClose(Resulti64 handle) {
i32 close_result = close((size_t)handle.value);
Resulti64 result = {
.success = close_result != -1,
.value = (i64)close_result,
};
return result;
}
fn bool osFileWriteOpenFile(Resulti64 handle, String data) {
assert(handle.success == true);
i32 wrote_this_round = 0;
for (i32 bytes_written = 0; bytes_written < data.length; bytes_written += wrote_this_round) {
wrote_this_round = write((size_t)handle.value, data.bytes + bytes_written, data.length - bytes_written);
if (wrote_this_round == -1) return false;
}
return true;
}