summaryrefslogtreecommitdiff
path: root/src/cp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cp.c')
-rw-r--r--src/cp.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/cp.c b/src/cp.c
index 679ef0fe7..9ba334255 100644
--- a/src/cp.c
+++ b/src/cp.c
@@ -428,7 +428,11 @@ make_dir_parents_private (char const *const_dir, size_t src_offset,
}
src_mode = stats.st_mode;
- if (mkdir (dir, src_mode))
+ /* POSIX says mkdir's behavior is implementation-defined when
+ (src_mode & ~S_IRWXUGO) != 0. However, common practice is
+ to ask mkdir to copy all the CHMOD_MODE_BITS, letting mkdir
+ decide what to do with S_ISUID | S_ISGID | S_ISVTX. */
+ if (mkdir (dir, src_mode & CHMOD_MODE_BITS) != 0)
{
error (0, errno, _("cannot make directory %s"),
quote (dir));