os file IO fixes linux

This commit is contained in:
2026-02-25 08:36:40 +01:00
parent 6932a7a142
commit 49ce94a6ab
2 changed files with 13 additions and 11 deletions

4
os.h
View File

@@ -11,8 +11,8 @@ void os_free(void *ptr, uint64 freeSize);
// ### File IO ###
string os_readEntireFile(Arena *arena, string filename);
bool os_writeEntireFile(Arena *arena, string filename, const byte *contents, uint64 contentsLength);
bool os_fileAppend(Arena *arena, string filename, const byte *contents, uint64 contentsLength);
bool os_writeEntireFile(string filename, const byte *contents, uint64 contentsLength);
bool os_fileAppend(string filename, const byte *contents, uint64 contentsLength);
// ### Standard IO ###
void os_print(StdStream target, const char *fmt, va_list argList);

View File

@@ -46,7 +46,7 @@ string os_readEntireFile(Arena *arena, string filename) {
close(input);
if (bytesRead == -1) {
arenaPopTo(arena, readBuffer.str);
return s("");
readBuffer = s("");
}
} else {
readBuffer = s("");
@@ -56,35 +56,37 @@ string os_readEntireFile(Arena *arena, string filename) {
return readBuffer;
}
bool os_writeEntireFile(Arena *arena, string filename, const byte *contents, uint64 contentsLength) {
Scratch temp = scratchStart(&arena, 1);
bool os_writeEntireFile(string filename, const byte *contents, uint64 contentsLength) {
Scratch temp = scratchStart(NULL, 0);
bool result = false;
int output = open(cstring(temp.arena, filename), O_WRONLY);
struct stat st;
stat((char *)filename.str, &st);
int output = open(cstring(temp.arena, filename), O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
if (output) {
int64 bytesWritten = write(output, contents, contentsLength);
if (bytesWritten != -1) {
result = true;
}
close(output);
}
close(output);
scratchEnd(temp);
return result;
}
bool os_fileAppend(Arena *arena, string filename, const byte *contents, uint64 contentsLength) {
Scratch temp = scratchStart(&arena, 1);
bool os_fileAppend(string filename, const byte *contents, uint64 contentsLength) {
Scratch temp = scratchStart(NULL, 0);
bool result = false;
int output = open(cstring(temp.arena, filename), O_APPEND);
int output = open(cstring(temp.arena, filename), O_WRONLY | O_APPEND);
if (output) {
int bytesWritten = write(output, contents, contentsLength);
if (bytesWritten != -1) {
result = true;
}
close(output);
}
close(output);
scratchEnd(temp);
return result;