~ chicken-core (chicken-5) 536e2351cf5836e76df79395813501fcb2c4b034
commit 536e2351cf5836e76df79395813501fcb2c4b034 Author: Vasilij Schneidermann <mail@vasilij.de> AuthorDate: Sat Oct 14 16:59:02 2017 +0200 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Fri Oct 20 17:32:54 2017 +1300 Handle other errors than EACCES for access(3) Fixes #1386. Signed-off-by: Peter Bex <peter@more-magic.net> Signed-off-by: Evan Hanson <evhan@foldling.org> diff --git a/NEWS b/NEWS index b7dc2ea1..acce52f6 100644 --- a/NEWS +++ b/NEWS @@ -59,6 +59,9 @@ - Renamed bit-set? to bit->boolean because of swapped argument order with respect to SRFI-33 and SRFI-60, which was confusing (fixes #1385, thanks to Lemonboy). + - file-{read,write,execute}-access will now raise an exception when + the file doesn't exist or some other non-access related problem is + detected (fixes #1386, thanks to Vasilij Schneidermann). - Module system - The compiler has been modularised, for improved namespacing. This diff --git a/posix-common.scm b/posix-common.scm index 553725a9..58342176 100644 --- a/posix-common.scm +++ b/posix-common.scm @@ -369,9 +369,12 @@ EOF (let () (define (check filename acc loc) (##sys#check-string filename loc) - (let ((r (fx= 0 (##core#inline "C_test_access" (##sys#make-c-string filename loc) acc)))) - (unless r (##sys#update-errno)) - r) ) + (let ((r (##core#inline "C_test_access" (##sys#make-c-string filename loc) acc))) + (if (fx= r -1) + (if (fx= (##sys#update-errno) _eacces) + #f + (posix-error #:file-error loc "cannot access file" filename)) + #t))) (set! file-read-access? (lambda (filename) (check filename _r_ok 'file-read-access?))) (set! file-write-access? (lambda (filename) (check filename _w_ok 'file-write-access?))) (set! file-execute-access? (lambda (filename) (check filename _x_ok 'file-execute-access?))) )Trap