}
/* build temporary file */
- if (!noexec)
- nafp = build_temporary_file();
+ if (!noexec) {
+ if (STREQU(new_archive_name, "-")) {
+ nafp = stdout;
+#if __MINGW32__
+ setmode(fileno(stdout), O_BINARY);
+#endif
+ }
+ else
+ nafp = build_temporary_file();
+ }
/* find needed files when automatic update */
if (update_if_newer && cmd_filec == 0)
if (cmd_filec == 0) {
if (oafp)
fclose(oafp);
- if (!noexec)
+ if (!noexec && nafp != stdout)
fclose(nafp);
return;
}
if (!noexec) {
write_archive_tail(nafp);
new_archive_size = ftell(nafp);
- fclose(nafp);
+ if (nafp != stdout) fclose(nafp);
}
/* build backup archive file */
report_archive_name_if_different();
- /* copy temporary file to new archive file */
- if (!noexec && (!strcmp(new_archive_name, "-") ||
- rename(temporary_name, new_archive_name) < 0))
- temporary_to_new_archive_file(new_archive_size);
-
- /* set new archive file mode/group */
- set_archive_file_mode();
+ if (nafp != stdout) {
+ /* copy temporary file to new archive file */
+ if (!noexec && rename(temporary_name, new_archive_name) < 0)
+ temporary_to_new_archive_file(new_archive_size);
+ /* set new archive file mode/group */
+ set_archive_file_mode();
+ }
/* remove archived files */
if (delete_after_append)
remove_files(cmd_filec, cmd_filev);