]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
Detect and terminate upon write failure.
authorJim Meyering <jim@meyering.net>
Sun, 30 Apr 2000 16:19:06 +0000 (16:19 +0000)
committerJim Meyering <jim@meyering.net>
Sun, 30 Apr 2000 16:19:06 +0000 (16:19 +0000)
src/yes.c

index 1e0155df0e0ebc0a6d48443aa78bc4b16c56019f..3ed2a56b88c2f4f2e3450aa8d95688a41e10bf40 100644 (file)
--- a/src/yes.c
+++ b/src/yes.c
@@ -1,5 +1,5 @@
 /* yes - output a string repeatedly until killed
-   Copyright (C) 1991-1997, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1991-1997, 1999, 2000 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -22,6 +22,7 @@
 #include <sys/types.h>
 #include <getopt.h>
 
+#include "error.h"
 #include "system.h"
 #include "long-options.h"
 
@@ -30,6 +31,8 @@
 
 #define AUTHORS "David MacKenzie"
 
+#define UNROLL 10000
+
 /* The name this program was run with. */
 char *program_name;
 
@@ -66,17 +69,35 @@ main (int argc, char **argv)
                        AUTHORS, usage);
 
   if (argc == 1)
-    while (1)
-      puts ("y");
-
-  while (1)
     {
-      int i;
-
-      for (i = 1; i < argc; i++)
+      while (1)
        {
-         fputs (argv[i], stdout);
-         putchar (i == argc - 1 ? '\n' : ' ');
+         int i;
+         for (i = 0; i < UNROLL; i++)
+           puts ("y");
+         if (ferror (stdout))
+           break;
        }
     }
+  else
+    {
+      while (1)
+       {
+         int i;
+         for (i = 0; i < UNROLL; i++)
+           {
+             int j;
+             for (j = 1; j < argc; j++)
+               {
+                 fputs (argv[j], stdout);
+                 putchar (j == argc - 1 ? '\n' : ' ');
+               }
+           }
+         if (ferror (stdout))
+           break;
+       }
+    }
+
+  error (0, errno, "standard output");
+  exit (EXIT_FAILURE);
 }