From: Joey Hess Date: Fri, 11 Apr 2008 23:11:33 +0000 (-0400) Subject: fix mode of new file renamed from temp file X-Git-Tag: 0.29~2 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c525af9d17aacb226d72495d1bd401ce001b03f6;p=moreutils fix mode of new file renamed from temp file --- diff --git a/sponge.c b/sponge.c index 0dd676a..80733a2 100644 --- a/sponge.c +++ b/sponge.c @@ -318,9 +318,19 @@ int main (int argc, char **argv) { ! S_ISLNK(statbuf.st_mode) ) || errno == ENOENT) && rename(tmpname, outname) == 0) { - /* Fix renamed file mode. */ - if (errno != ENOENT && - chmod(outname, statbuf.st_mode) != 0) { + /* Fix renamed file mode to match either + * the old file mode, or the default file + * mode for a newly created file. */ + mode_t mode; + if (errno != ENOENT) { + mode = statbuf.st_mode; + } + else { + mode_t mask = umask(0); + umask(mask); + mode = 0666 & ~mask; + } + if (chmod(outname, mode) != 0) { perror("chmod"); exit(1); }