From: Benjamin Poirier Date: Tue, 27 Aug 2019 05:28:43 +0000 (+0900) Subject: Preserve file mode when using doing --merge --replace X-Git-Tag: v1.2~1^2~1^2 X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=a9ac6337b9ab27d1f4d3258b244dab643c5c2420;p=wiggle.git Preserve file mode when using doing --merge --replace --- diff --git a/wiggle.c b/wiggle.c index 140b292..d4e88eb 100644 --- a/wiggle.c +++ b/wiggle.c @@ -589,6 +589,20 @@ static int do_merge(int argc, char *argv[], int obj, int blanks, if (outfilename) fclose(outfile); else if (replace) { + struct stat statbuf; + + if (stat(argv[0], &statbuf) != 0) { + fprintf(stderr, + "%s: failed to stat original file. - %s\n", + Cmd, strerror(errno)); + return 2; + } + if (fchmod(fileno(outfile), statbuf.st_mode) != 0) { + fprintf(stderr, + "%s: failed to change permission of new file. - %s\n", + Cmd, strerror(errno)); + return 2; + } fclose(outfile); if (rename(argv[0], orignew) == 0 && rename(replacename, argv[0]) == 0)