diff --git a/lib/chibi/ast.c b/lib/chibi/ast.c index 8e48aa3d..18def0d8 100644 --- a/lib/chibi/ast.c +++ b/lib/chibi/ast.c @@ -444,6 +444,14 @@ static sexp sexp_string_contains (sexp ctx, sexp self, sexp_sint_t n, sexp x, se return res ? sexp_make_fixnum(res-sexp_string_data(x)) : SEXP_FALSE; } +static sexp sexp_errno (sexp ctx, sexp self, sexp_sint_t n) { +#ifdef PLAN9 + return SEXP_FALSE; +#else + return sexp_make_fixnum(errno); +#endif +} + static sexp sexp_error_string (sexp ctx, sexp self, sexp_sint_t n, sexp x) { #ifdef PLAN9 return SEXP_FALSE; @@ -612,6 +620,7 @@ sexp sexp_init_library (sexp ctx, sexp self, sexp_sint_t n, sexp env, const char #endif sexp_define_foreign(ctx, env, "thread-list", 0, sexp_thread_list); sexp_define_foreign(ctx, env, "string-contains", 2, sexp_string_contains); + sexp_define_foreign(ctx, env, "errno", 0, sexp_errno); sexp_define_foreign_opt(ctx, env, "integer->error-string", 1, sexp_error_string, SEXP_FALSE); sexp_define_foreign(ctx, env, "update-free-vars!", 1, sexp_update_free_vars); sexp_define_foreign(ctx, env, "setenv", 2, sexp_setenv); diff --git a/lib/chibi/ast.sld b/lib/chibi/ast.sld index a50730f2..c9356be1 100644 --- a/lib/chibi/ast.sld +++ b/lib/chibi/ast.sld @@ -35,7 +35,7 @@ env-define! env-push! env-syntactic? env-syntactic?-set! core-code type-name type-cpl type-parent type-slots type-num-slots type-printer object-size integer->immediate gc atomically thread-list - string-contains integer->error-string + string-contains errno integer->error-string flatten-dot update-free-vars! setenv unsetenv) (import (chibi)) (include-shared "ast")