~ chicken-core (chicken-5) 27e912e0aad2824bb36b689ceba57112a5bbe703
commit 27e912e0aad2824bb36b689ceba57112a5bbe703
Author: Peter Bex <peter.bex@xs4all.nl>
AuthorDate: Tue Oct 1 22:16:26 2013 +0200
Commit: Christian Kellermann <ckeen@pestilenz.org>
CommitDate: Wed Oct 2 14:12:45 2013 +0200
A few fixes for file-creation-mode.
- Don't pass #f to C_umask as if it were a fixnum
- Ensure it always returns the old value even if no new value is set
- Document the fact that MODE is optional
Signed-off-by: Christian Kellermann <ckeen@pestilenz.org>
diff --git a/manual/Unit posix b/manual/Unit posix
index 961fbf15..d27fa88a 100644
--- a/manual/Unit posix
+++ b/manual/Unit posix
@@ -598,10 +598,11 @@ exact integers) using the {{chown()}} system call.
==== file-creation-mode
-<procedure>(file-creation-mode MODE)</procedure>
+<procedure>(file-creation-mode [MODE])</procedure>
Returns the initial file permissions used for newly created files
-(as with {{umask(2)}}. You can set the mode by executing
+(as with {{umask(2)}}). If {{MODE}} is supplied, the mode is
+changed to this value. You can set the mode by executing
(set! (file-creation-mode) MODE)
diff --git a/posix-common.scm b/posix-common.scm
index 99c03150..99a840cf 100644
--- a/posix-common.scm
+++ b/posix-common.scm
@@ -470,9 +470,9 @@ EOF
(getter-with-setter
(lambda (#!optional um)
(when um (##sys#check-exact um 'file-creation-mode))
- (let ((um2 (##core#inline "C_umask" um)))
- (unless um (##core#inline "C_umask" um2)
- um2)))
+ (let ((um2 (##core#inline "C_umask" (or um 0))))
+ (unless um (##core#inline "C_umask" um2)) ; restore
+ um2))
(lambda (um)
(##sys#check-exact um 'file-creation-mode)
(##core#inline "C_umask" um))
Trap