diff --git a/lib/std/io/file.c3 b/lib/std/io/file.c3 index db110e6b9..a74fc82c1 100644 --- a/lib/std/io/file.c3 +++ b/lib/std/io/file.c3 @@ -76,7 +76,7 @@ fn void! File.memopen(File* file, char[] data, String mode) */ fn void! File.write_byte(&self, char c) @dynamic { - if (!libc::fputc(c, self.file)) return IoError.EOF?; + return os::native_fputc(c, self.file); } /** diff --git a/lib/std/io/os/file_libc.c3 b/lib/std/io/os/file_libc.c3 index b5cd36273..f156e0054 100644 --- a/lib/std/io/os/file_libc.c3 +++ b/lib/std/io/os/file_libc.c3 @@ -75,6 +75,11 @@ fn usz! native_fwrite(CFile file, char[] buffer) @inline return libc::fwrite(buffer.ptr, 1, buffer.len, file); } +fn void! native_fputc(CInt c, CFile stream) @inline +{ + if (!libc::fputc(c, stream)) return IoError.EOF?; +} + fn usz! native_fread(CFile file, char[] buffer) @inline { return libc::fread(buffer.ptr, 1, buffer.len, file); diff --git a/lib/std/io/os/file_nolibc.c3 b/lib/std/io/os/file_nolibc.c3 index c395365d6..b52d80f10 100644 --- a/lib/std/io/os/file_nolibc.c3 +++ b/lib/std/io/os/file_nolibc.c3 @@ -9,6 +9,7 @@ def FtellFn = fn usz!(void*); def FwriteFn = fn usz!(void*, char[] buffer); def FreadFn = fn usz!(void*, char[] buffer); def RemoveFn = fn void!(String); +def FputcFn = fn void!(int, void*); FopenFn native_fopen_fn @weak @if(!$defined(native_fopen_fn)); FcloseFn native_fclose_fn @weak @if(!$defined(native_fclose_fn)); @@ -18,6 +19,7 @@ FtellFn native_ftell_fn @weak @if(!$defined(native_ftell_fn)); FwriteFn native_fwrite_fn @weak @if(!$defined(native_fwrite_fn)); FreadFn native_fread_fn @weak @if(!$defined(native_fread_fn)); RemoveFn native_remove_fn @weak @if(!$defined(native_remove_fn)); +FputcFn native_fputc_fn @weak @if(!$defined(native_fputc_fn)); /** * @require mode.len > 0 @@ -73,3 +75,9 @@ fn usz! native_fread(CFile file, char[] buffer) @inline if (native_fread_fn) return native_fread_fn(file, buffer); return IoError.UNSUPPORTED_OPERATION?; } + +fn void! native_fputc(CInt c, CFile stream) @inline +{ + if (native_fputc_fn) return native_fputc_fn(c, stream); + return IoError.UNSUPPORTED_OPERATION?; +}