>From 707b3509623073626f9d65bc9023a7eeaa0679f4 Mon Sep 17 00:00:00 2001 From: Evan Hanson Date: Sat, 17 Feb 2018 17:08:52 +1300 Subject: [PATCH 2/3] Move `errno' from toplevel to chicken.errno --- chicken.import.scm | 1 - library.scm | 22 +++++++++------------- posix.scm | 6 ++---- types.db | 2 +- 4 files changed, 12 insertions(+), 19 deletions(-) diff --git a/chicken.import.scm b/chicken.import.scm index c990a079..67116e23 100644 --- a/chicken.import.scm +++ b/chicken.import.scm @@ -46,7 +46,6 @@ (enable-warnings . chicken.base#enable-warnings) (equal=? . chicken.base#equal=?) (er-macro-transformer . chicken.syntax#er-macro-transformer) - errno (error . chicken.base#error) (eval-handler . chicken.eval#eval-handler) (exact-integer? . chicken.base#exact-integer?) diff --git a/library.scm b/library.scm index 12bbe607..dd269c23 100644 --- a/library.scm +++ b/library.scm @@ -3208,8 +3208,7 @@ EOF (let ((c (##core#inline "C_read_char" p))) (cond ((eq? -1 c) - (##sys#update-errno) - (if (eq? (errno) (foreign-value "EINTR" int)) + (if (eq? (##sys#update-errno) (foreign-value "EINTR" int)) (##sys#dispatch-interrupt loop) (##sys#signal-hook #:file-error 'read-char @@ -3221,8 +3220,7 @@ EOF (let ((c (##core#inline "C_peek_char" p))) (cond ((eq? -1 c) - (##sys#update-errno) - (if (eq? (errno) (foreign-value "EINTR" int)) + (if (eq? (##sys#update-errno) (foreign-value "EINTR" int)) (##sys#dispatch-interrupt loop) (##sys#signal-hook #:file-error 'peek-char @@ -3246,8 +3244,7 @@ EOF (cond ((eof-object? len) ; EOF returns 0 bytes read act) ((fx< len 0) - (##sys#update-errno) - (if (eq? (errno) (foreign-value "EINTR" int)) + (if (eq? (##sys#update-errno) (foreign-value "EINTR" int)) (##sys#dispatch-interrupt (lambda () (loop (fx- rem len) (fx+ act len) (fx+ start len)))) @@ -3281,8 +3278,7 @@ EOF (##sys#string-append result buffer) #t)) ] ((fx< n 0) - (##sys#update-errno) - (if (eq? (errno) (foreign-value "EINTR" int)) + (if (eq? (##sys#update-errno) (foreign-value "EINTR" int)) (let ((n (fx- (fxneg n) 1))) (##sys#dispatch-interrupt (lambda () @@ -5767,14 +5763,14 @@ EOF ;;; Accessing "errno": -(define-foreign-variable ##sys#errno int "errno") +(define-foreign-variable _errno int "errno") (define ##sys#update-errno) -(define errno) +(define ##sys#errno) -(let ([rn 0]) - (set! ##sys#update-errno (lambda () (set! rn ##sys#errno) rn)) - (set! errno (lambda () rn)) ) +(let ((n 0)) + (set! ##sys#update-errno (lambda () (set! n _errno) n)) + (set! ##sys#errno (lambda () n))) ;;; Format error string for unterminated here-docs: diff --git a/posix.scm b/posix.scm index d29a51f0..f8f7f1da 100644 --- a/posix.scm +++ b/posix.scm @@ -104,10 +104,8 @@ (include "posixwin.scm")))) (module chicken.errno * -(import scheme - (only chicken errno) - (chicken module)) -(export errno) +(import scheme) +(define (errno) (##sys#errno)) (define errno/2big _e2big) (define errno/acces _eacces) (define errno/again _eagain) diff --git a/types.db b/types.db index 6c8e58b8..5c73ad30 100644 --- a/types.db +++ b/types.db @@ -1176,7 +1176,6 @@ (chicken.time#current-seconds (#(procedure #:clean) chicken.time#current-seconds () integer)) (chicken.time#current-milliseconds (#(procedure #:clean) chicken.time#current-milliseconds () integer)) -(errno (#(procedure #:clean) errno () fixnum)) (##sys#error (procedure ##sys#error (* #!rest) noreturn)) (##sys#signal-hook (procedure ##sys#signal-hook (* #!rest) noreturn)) (##sys#debug-mode? (procedure ##sys#debug-mode? () boolean) @@ -1865,6 +1864,7 @@ ;; errno +(chicken.errno#errno (#(procedure #:clean) chicken.errno#errno () fixnum)) (chicken.errno#errno/2big fixnum) (chicken.errno#errno/acces fixnum) (chicken.errno#errno/again fixnum) -- 2.11.0