X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fcopy.c;h=0239a58066ec3314dc004fde3a3a49cf84846e2b;hb=63c372cb9df3bee01e3bf8cd7f96f336bddda846;hp=3df636704c3ba9a333bb440d00cc2948eec48e39;hpb=ebd93cb684806ac0f352139e69ac8f53eb49f5e4;p=elogind.git diff --git a/src/shared/copy.c b/src/shared/copy.c index 3df636704..0239a5806 100644 --- a/src/shared/copy.c +++ b/src/shared/copy.c @@ -359,7 +359,7 @@ int copy_file_fd(const char *from, int fdt, bool try_reflink) { return r; } -int copy_file(const char *from, const char *to, int flags, mode_t mode) { +int copy_file(const char *from, const char *to, int flags, mode_t mode, unsigned chattr_flags) { int fdt, r; assert(from); @@ -371,6 +371,9 @@ int copy_file(const char *from, const char *to, int flags, mode_t mode) { return -errno; } + if (chattr_flags != 0) + (void) chattr_fd(fdt, true, chattr_flags); + r = copy_file_fd(from, fdt, true); if (r < 0) { close(fdt); @@ -386,7 +389,7 @@ int copy_file(const char *from, const char *to, int flags, mode_t mode) { return 0; } -int copy_file_atomic(const char *from, const char *to, mode_t mode, bool replace) { +int copy_file_atomic(const char *from, const char *to, mode_t mode, bool replace, unsigned chattr_flags) { _cleanup_free_ char *t; int r; @@ -397,7 +400,7 @@ int copy_file_atomic(const char *from, const char *to, mode_t mode, bool replace if (r < 0) return r; - r = copy_file(from, t, O_NOFOLLOW|O_EXCL, mode); + r = copy_file(from, t, O_NOFOLLOW|O_EXCL, mode, chattr_flags); if (r < 0) return r;