summaryrefslogtreecommitdiff
path: root/lang/guile20/patches/patch-libguile_filesys.c
diff options
context:
space:
mode:
Diffstat (limited to 'lang/guile20/patches/patch-libguile_filesys.c')
-rw-r--r--lang/guile20/patches/patch-libguile_filesys.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/lang/guile20/patches/patch-libguile_filesys.c b/lang/guile20/patches/patch-libguile_filesys.c
new file mode 100644
index 00000000000..225accfd7f6
--- /dev/null
+++ b/lang/guile20/patches/patch-libguile_filesys.c
@@ -0,0 +1,28 @@
+$NetBSD: patch-libguile_filesys.c,v 1.1 2017/02/20 20:01:45 gdt Exp $
+
+When using mkostemp (an interface not defined by POSIX), restrict
+flags to the set defined by the documentation of particular operating
+systems.
+
+See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=24862#23 for discussion.
+
+This patch has not yet been sent upstream.
+
+--- libguile/filesys.c.orig 2016-12-15 00:03:33.000000000 +0000
++++ libguile/filesys.c
+@@ -1486,6 +1486,15 @@ SCM_DEFINE (scm_i_mkstemp, "mkstemp!", 1
+ mode_bits = scm_i_mode_bits (mode);
+ }
+
++#ifdef APPLE
++ /* https://debbugs.gnu.org/cgi/bugreport.cgi?bug=24862#23 */
++ open_flags &= O_APPEND|O_SHLOCK|O_EXLOCK|O_CLOEXEC;
++#endif
++#ifdef __NetBSD__
++ /* Restrict to list of flags documented in man page. */
++ open_flags = O_APPEND|O_DIRECT|O_SHLOCK|O_EXLOCK|O_SYNC|O_CLOEXEC;
++#endif
++
+ SCM_SYSCALL (rv = mkostemp (c_tmpl, open_flags));
+ if (rv == -1)
+ SCM_SYSERROR;