aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.txt6
-rw-r--r--ports/unix/guts/fchmodat.c7
2 files changed, 12 insertions, 1 deletions
diff --git a/ChangeLog.txt b/ChangeLog.txt
index d4fdeec..27a6fcf 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -1,3 +1,9 @@
+2014-05-15:
+ * (seebs) drop flags when calling fchmodat() to appease GNU tar.
+
+2014-04-24:
+ * (seebs) extended attribute support
+
2014-01-23:
* (seebs) mknod wasn't calling mknodat.
* (seebs) mkdirat wasn't recording the logical DB mode for directories
diff --git a/ports/unix/guts/fchmodat.c b/ports/unix/guts/fchmodat.c
index 36a8490..c18fd4c 100644
--- a/ports/unix/guts/fchmodat.c
+++ b/ports/unix/guts/fchmodat.c
@@ -54,7 +54,12 @@
* specified, we already bailed previously. */
real_chmod(path, PSEUDO_FS_MODE(mode, S_ISDIR(buf.st_mode)));
#else
- real_fchmodat(dirfd, path, PSEUDO_FS_MODE(mode, S_ISDIR(buf.st_mode)), flags);
+ /* AT_SYMLINK_NOFOLLOW isn't supported by fchmodat. GNU tar
+ * tries to use it anyway, figuring it can just retry if that
+ * fails. But we never fail, so they don't retry. So we drop
+ * the flag here.
+ */
+ real_fchmodat(dirfd, path, PSEUDO_FS_MODE(mode, S_ISDIR(buf.st_mode)), 0);
#endif
/* we ignore a failure from underlying fchmod, because pseudo
* may believe you are permitted to change modes that the filesystem