summaryrefslogtreecommitdiff
path: root/devel/glib20/files/patch-gio_glocalfileoutputstream.c
blob: 9a373188836e6f7d47992cf8006bd51c3a30120b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
From 45d4b59e3f7ef7b41db08f0c11ee5000126cfedb Mon Sep 17 00:00:00 2001
From: Ting-Wei Lan <lantw@src.gnome.org>
Date: Sun, 4 Dec 2016 15:02:54 +0800
Subject: [PATCH] glocalfileoutputstream: Fix symlink writing on FreeBSD and
 NetBSD

FreeBSD, DragonflyBSD and NetBSD support O_NOFOLLOW, but they use error
numbers that are different from what POSIX standard specifies. They are
not going to change the behavior, and existing programs on these systems
already take advantage of this difference. To support them, we have to
add a check in GIO to use different error numbers on these systems.

https://bugzilla.gnome.org/show_bug.cgi?id=775593
---
 gio/glocalfileoutputstream.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/gio/glocalfileoutputstream.c b/gio/glocalfileoutputstream.c
index 81184a671..4b3733cce 100644
--- gio/glocalfileoutputstream.c
+++ gio/glocalfileoutputstream.c
@@ -763,7 +763,13 @@ handle_overwrite_open (const char    *filename,
 #ifdef O_NOFOLLOW
   is_symlink = FALSE;
   fd = g_open (filename, open_flags | O_NOFOLLOW, mode);
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
+  if (fd == -1 && errno == EMLINK)
+#elif defined(__NetBSD__)
+  if (fd == -1 && errno == EFTYPE)
+#else
   if (fd == -1 && errno == ELOOP)
+#endif
     {
       /* Could be a symlink, or it could be a regular ELOOP error,
        * but then the next open will fail too. */
-- 
2.13.0