diff options
author | Jan Beich <jbeich@FreeBSD.org> | 2017-07-01 05:19:22 +0000 |
---|---|---|
committer | Jan Beich <jbeich@FreeBSD.org> | 2017-07-01 05:19:22 +0000 |
commit | 9342d420116e70ab9042917ec37dc37cc5d2dc7f (patch) | |
tree | 5e3ecb101a3617d6d2aed1197f811cfcb7248980 | |
parent | 3de40a623700861479db1f790b3d1d1ddc4a8f64 (diff) | |
download | ports-9342d420116e70ab9042917ec37dc37cc5d2dc7f.tar.gz ports-9342d420116e70ab9042917ec37dc37cc5d2dc7f.zip |
devel/glib20: fix symlink writing
$ gio save testfile < /etc/shells
$ ln -s testfile testlink
$ gio save testlink < /etc/shells
gio: file:///path/to/testlink: Error opening file '/path/to/testlink': Too many links
PR: 212572
Reported by: Yuri Victorovich
Submitted by: Ting-Wei Lan
Approved by: maintainer timeout (3 weeks)
MFH: 2017Q2
Notes
Notes:
svn path=/head/; revision=444811
-rw-r--r-- | devel/glib20/Makefile | 2 | ||||
-rw-r--r-- | devel/glib20/files/patch-gio_glocalfileoutputstream.c | 38 |
2 files changed, 39 insertions, 1 deletions
diff --git a/devel/glib20/Makefile b/devel/glib20/Makefile index 023c92f76ab5..929b1f186ee6 100644 --- a/devel/glib20/Makefile +++ b/devel/glib20/Makefile @@ -3,7 +3,7 @@ PORTNAME= glib PORTVERSION= 2.50.2 -PORTREVISION= 2 +PORTREVISION= 3 PORTEPOCH= 1 CATEGORIES= devel MASTER_SITES= GNOME diff --git a/devel/glib20/files/patch-gio_glocalfileoutputstream.c b/devel/glib20/files/patch-gio_glocalfileoutputstream.c new file mode 100644 index 000000000000..9a373188836e --- /dev/null +++ b/devel/glib20/files/patch-gio_glocalfileoutputstream.c @@ -0,0 +1,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 + |