summaryrefslogtreecommitdiff
path: root/chapter25/src/main/smp/sys
diff options
context:
space:
mode:
Diffstat (limited to 'chapter25/src/main/smp/sys')
-rw-r--r--chapter25/src/main/smp/sys/io.smp2
-rw-r--r--chapter25/src/main/smp/sys/libc.smp5
2 files changed, 4 insertions, 3 deletions
diff --git a/chapter25/src/main/smp/sys/io.smp b/chapter25/src/main/smp/sys/io.smp
index 33fbdb5e..d6263ffe 100644
--- a/chapter25/src/main/smp/sys/io.smp
+++ b/chapter25/src/main/smp/sys/io.smp
@@ -12,7 +12,7 @@ val read = { i32 fd ->
int len = 0;
while( true ) {
i32 rez = libc.read(fd,ptr,buf#);
- if( rez > buf# ) libc._exit(libc.errno);
+ if( rez > buf# ) libc._exit(libc.errno());
len += rez;
if( rez < buf# )
break;
diff --git a/chapter25/src/main/smp/sys/libc.smp b/chapter25/src/main/smp/sys/libc.smp
index 133b5bf7..17ee65cb 100644
--- a/chapter25/src/main/smp/sys/libc.smp
+++ b/chapter25/src/main/smp/sys/libc.smp
@@ -30,8 +30,9 @@ i32 STDERR = 2;
// status
{ i32 -> i32 } _exit = "C";
-// Error return from many native calls
-i32 errno = "C";
+// errno is not an ordinary C data symbol; read it through the native runtime.
+{ i32 } simple_errno = "C";
+val errno = { -> simple_errno(); };
// addr len prot flags fd off -> void*
{ i64 i64 i32 i32 i32 i32 -> i64 } mmap = "C";
// mmap flags