exit(1);
 }
 
-/*
- * In the intended usage of this program, the stdout is redirected to .*.cmd
- * files. The return value of printf() must be checked to catch any error,
- * e.g. "No space left on device".
- */
-static void xprintf(const char *format, ...)
-{
-       va_list ap;
-       int ret;
-
-       va_start(ap, format);
-       ret = vprintf(format, ap);
-       if (ret < 0) {
-               perror("fixdep");
-               exit(1);
-       }
-       va_end(ap);
-}
-
 struct item {
        struct item     *next;
        unsigned int    len;
 
        define_config(m, slen, hash);
        /* Print out a dependency path from a symbol name. */
-       xprintf("    $(wildcard include/config/%.*s) \\\n", slen, m);
+       printf("    $(wildcard include/config/%.*s) \\\n", slen, m);
 }
 
 /* test if s ends in sub */
                                 */
                                if (!saw_any_target) {
                                        saw_any_target = 1;
-                                       xprintf("source_%s := %s\n\n",
-                                               target, m);
-                                       xprintf("deps_%s := \\\n", target);
+                                       printf("source_%s := %s\n\n",
+                                              target, m);
+                                       printf("deps_%s := \\\n", target);
                                }
                                is_first_dep = 0;
                        } else {
-                               xprintf("  %s \\\n", m);
+                               printf("  %s \\\n", m);
                        }
 
                        buf = read_file(m);
                exit(1);
        }
 
-       xprintf("\n%s: $(deps_%s)\n\n", target, target);
-       xprintf("$(deps_%s):\n", target);
+       printf("\n%s: $(deps_%s)\n\n", target, target);
+       printf("$(deps_%s):\n", target);
 }
 
 int main(int argc, char *argv[])
        target = argv[2];
        cmdline = argv[3];
 
-       xprintf("cmd_%s := %s\n\n", target, cmdline);
+       printf("cmd_%s := %s\n\n", target, cmdline);
 
        buf = read_file(depfile);
        parse_dep_file(buf, target);
        free(buf);
 
+       fflush(stdout);
+
+       /*
+        * In the intended usage, the stdout is redirected to .*.cmd files.
+        * Call ferror() to catch errors such as "No space left on device".
+        */
+       if (ferror(stdout)) {
+               fprintf(stderr, "fixdep: not all data was written to the output\n");
+               exit(1);
+       }
+
        return 0;
 }