pax: make list file handle line-buffered unless it is stderr.
authormillert <millert@openbsd.org>
Fri, 10 May 2024 20:28:31 +0000 (20:28 +0000)
committermillert <millert@openbsd.org>
Fri, 10 May 2024 20:28:31 +0000 (20:28 +0000)
This fixes a problem where the file list output was fully-buffered
when used as part of a pipeline.  With this change, files are listed
as they are extracted in verbose mode.  OK deraadt@ guenther@

bin/pax/options.c

index 2e99601..cd3f5f6 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: options.c,v 1.114 2024/04/17 18:12:12 jca Exp $       */
+/*     $OpenBSD: options.c,v 1.115 2024/05/10 20:28:31 millert Exp $   */
 /*     $NetBSD: options.c,v 1.6 1996/03/26 23:54:18 mrg Exp $  */
 
 /*-
@@ -277,21 +277,20 @@ options(int argc, char **argv)
        if (strcmp(NM_TAR, argv0) == 0) {
                op_mode = OP_TAR;
                tar_options(argc, argv);
-               return;
-       }
 #ifndef NOCPIO
-       else if (strcmp(NM_CPIO, argv0) == 0) {
+       else if (strcmp(NM_CPIO, argv0) == 0) {
                op_mode = OP_CPIO;
                cpio_options(argc, argv);
-               return;
-       }
 #endif /* !NOCPIO */
-       /*
-        * assume pax as the default
-        */
-       argv0 = NM_PAX;
-       op_mode = OP_PAX;
-       pax_options(argc, argv);
+       } else {
+               argv0 = NM_PAX;
+               op_mode = OP_PAX;
+               pax_options(argc, argv);
+       }
+
+       /* Line-buffer the file list output as needed. */
+       if (listf != stderr)
+               setvbuf(listf, NULL, _IOLBF, 0);
 }
 
 /*