OSDN Git Service

* src/lhadd.c (cmd_add): No create a temporary file when archive
authorarai <arai@6a8cc165-1e22-0410-a132-eb4e3f353aba>
Thu, 20 Jun 2002 14:42:45 +0000 (14:42 +0000)
committerarai <arai@6a8cc165-1e22-0410-a132-eb4e3f353aba>
Thu, 20 Jun 2002 14:42:45 +0000 (14:42 +0000)
is written in stdout.

git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/lha/lha/trunk@210 6a8cc165-1e22-0410-a132-eb4e3f353aba

src/lhadd.c

index d0aed87..92c1217 100644 (file)
@@ -491,8 +491,16 @@ cmd_add()
        }
 
        /* 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)
@@ -504,7 +512,7 @@ cmd_add()
        if (cmd_filec == 0) {
                if (oafp)
                        fclose(oafp);
-               if (!noexec)
+               if (!noexec && nafp != stdout)
                        fclose(nafp);
                return;
        }
@@ -527,7 +535,7 @@ cmd_add()
        if (!noexec) {
                write_archive_tail(nafp);
                new_archive_size = ftell(nafp);
-               fclose(nafp);
+               if (nafp != stdout) fclose(nafp);
        }
 
        /* build backup archive file */
@@ -536,14 +544,14 @@ cmd_add()
 
        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);