mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
76 lines
2.3 KiB
C
76 lines
2.3 KiB
C
module std::io::os @if(env::NO_LIBC);
|
|
import libc;
|
|
|
|
def FopenFn = fn void*!(String, String);
|
|
def FreopenFn = fn void*!(void*, String, String);
|
|
def FcloseFn = fn void!(void*);
|
|
def FseekFn = fn void!(void*, isz, Seek);
|
|
def FtellFn = fn usz!(void*);
|
|
def FwriteFn = fn usz!(void*, char[] buffer);
|
|
def FreadFn = fn usz!(void*, char[] buffer);
|
|
def RemoveFn = fn void!(String);
|
|
|
|
FopenFn native_fopen_fn @weak @if(!$defined(native_fopen_fn));
|
|
FcloseFn native_fclose_fn @weak @if(!$defined(native_fclose_fn));
|
|
FreopenFn native_freopen_fn @weak @if(!$defined(native_freopen_fn));
|
|
FseekFn native_fseek_fn @weak @if(!$defined(native_fseek_fn));
|
|
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));
|
|
|
|
/**
|
|
* @require mode.len > 0
|
|
* @require filename.len > 0
|
|
**/
|
|
fn void*! native_fopen(String filename, String mode) @inline
|
|
{
|
|
if (native_fopen_fn) return native_fopen_fn(filename, mode);
|
|
unreachable("Tried to call fopen without support.");
|
|
}
|
|
|
|
/**
|
|
* Delete a file.
|
|
*
|
|
* @require filename.len > 0
|
|
**/
|
|
fn void! native_remove(String filename) @inline
|
|
{
|
|
if (native_remove_fn) return native_remove_fn(filename);
|
|
unreachable("Tried to call remove without support.");
|
|
}
|
|
|
|
/**
|
|
* @require mode.len > 0
|
|
* @require filename.len > 0
|
|
**/
|
|
fn void*! native_freopen(void* file, String filename, String mode) @inline
|
|
{
|
|
if (native_freopen_fn) return native_freopen_fn(file, filename, mode);
|
|
unreachable("Tried to call freopen without support.");
|
|
}
|
|
|
|
fn void! native_fseek(void* file, isz offset, Seek seek_mode) @inline
|
|
{
|
|
if (native_fseek_fn) return native_fseek_fn(file, offset, seek_mode);
|
|
unreachable("Tried to call fseek without support.");
|
|
}
|
|
|
|
fn usz! native_ftell(CFile file) @inline
|
|
{
|
|
if (native_ftell_fn) return native_ftell_fn(file);
|
|
unreachable("Tried to call ftell without support.");
|
|
}
|
|
|
|
fn usz! native_fwrite(CFile file, char[] buffer) @inline
|
|
{
|
|
if (native_fwrite_fn) return native_fwrite_fn(file, buffer);
|
|
unreachable("Tried to call fwrite without support.");
|
|
}
|
|
|
|
fn usz! native_fread(CFile file, char[] buffer) @inline
|
|
{
|
|
if (native_fread_fn) return native_fread_fn(file, buffer);
|
|
unreachable("Tried to call fread without support.");
|
|
}
|