aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2019-03-30 14:51:42 +0000
committergingerBill <bill@gingerbill.org>2019-03-30 14:51:42 +0000
commit68d4bde82fe58150871feb91e7c3dbc0de4e7662 (patch)
tree67c3f3e549f66ce58e356e47d40a5cc7942ff5dc
parenta019059975736fa099958b00f3927f57a6240613 (diff)
Overrideable stdin, stdout, stderr at the `context` level
-rw-r--r--core/fmt/fmt.odin12
-rw-r--r--core/log/file_console_logger.odin2
-rw-r--r--core/runtime/core.odin8
3 files changed, 15 insertions, 7 deletions
diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin
index c1d21c00d..c75cbba27 100644
--- a/core/fmt/fmt.odin
+++ b/core/fmt/fmt.odin
@@ -59,12 +59,12 @@ fprintf :: proc(fd: os.Handle, fmt: string, args: ..any) -> int {
// print* procedures return the number of bytes written
-print :: proc(args: ..any) -> int { return fprint(os.stdout, ..args); }
-print_err :: proc(args: ..any) -> int { return fprint(os.stderr, ..args); }
-println :: proc(args: ..any) -> int { return fprintln(os.stdout, ..args); }
-println_err :: proc(args: ..any) -> int { return fprintln(os.stderr, ..args); }
-printf :: proc(fmt: string, args: ..any) -> int { return fprintf(os.stdout, fmt, ..args); }
-printf_err :: proc(fmt: string, args: ..any) -> int { return fprintf(os.stderr, fmt, ..args); }
+print :: proc(args: ..any) -> int { return fprint(context.stdout, ..args); }
+print_err :: proc(args: ..any) -> int { return fprint(context.stderr, ..args); }
+println :: proc(args: ..any) -> int { return fprintln(context.stdout, ..args); }
+println_err :: proc(args: ..any) -> int { return fprintln(context.stderr, ..args); }
+printf :: proc(fmt: string, args: ..any) -> int { return fprintf(context.stdout, fmt, ..args); }
+printf_err :: proc(fmt: string, args: ..any) -> int { return fprintf(context.stderr, fmt, ..args); }
// aprint* procedures return a string that was allocated with the current context
diff --git a/core/log/file_console_logger.odin b/core/log/file_console_logger.odin
index 1a961f910..3778d3e53 100644
--- a/core/log/file_console_logger.odin
+++ b/core/log/file_console_logger.odin
@@ -69,7 +69,7 @@ file_console_logger_proc :: proc(logger_data: rawptr, level: Level, text: string
h : os.Handle;
if(data.file_handle != os.INVALID_HANDLE) do h = data.file_handle;
- else do h = level <= Level.Error ? os.stdout : os.stderr;
+ else do h = level <= Level.Error ? context.stdout : context.stderr;
backing: [1024]byte; //NOTE(Hoej): 1024 might be too much for a header backing, unless somebody has really long paths.
buf := strings.builder_from_slice(backing[:]);
diff --git a/core/runtime/core.odin b/core/runtime/core.odin
index 187573557..5932d57c5 100644
--- a/core/runtime/core.odin
+++ b/core/runtime/core.odin
@@ -213,6 +213,10 @@ Context :: struct {
assertion_failure_proc: Assertion_Failure_Proc,
logger: log.Logger,
+ stdin: os.Handle,
+ stdout: os.Handle,
+ stderr: os.Handle,
+
thread_id: int,
user_data: any,
@@ -350,6 +354,10 @@ __init_context :: proc "contextless" (c: ^Context) {
c.logger.procedure = log.nil_logger_proc;
c.logger.data = nil;
+
+ c.stdin = os.stdin;
+ c.stdout = os.stdout;
+ c.stderr = os.stderr;
}
@builtin