update random config tester
[oweals/busybox.git] / coreutils / fold.c
index e33be55944500872cb62b7ebc84a10cb512690a9..e2a30d5d4e90f1633a79dc840cb4f6de6d1d8714 100644 (file)
@@ -5,25 +5,24 @@
    Copyright (C) 91, 1995-2002 Free Software Foundation, Inc.
 
    Modified for busybox based on coreutils v 5.0
-   Copyright (C) 2003 Glenn McGrath <bug1@iinet.net.au>
+   Copyright (C) 2003 Glenn McGrath
 
    Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
 */
 
-#include "busybox.h"
+#include "libbb.h"
 
-static unsigned long flags;
-#define FLAG_COUNT_BYTES       1
-#define FLAG_BREAK_SPACES      2
-#define FLAG_WIDTH                     4
+/* Must match getopt32 call */
+#define FLAG_COUNT_BYTES        1
+#define FLAG_BREAK_SPACES       2
+#define FLAG_WIDTH              4
 
 /* Assuming the current column is COLUMN, return the column that
    printing C will move the cursor to.
    The first column is 0. */
-
 static int adjust_column(int column, char c)
 {
-       if (!(flags & FLAG_COUNT_BYTES)) {
+       if (!(option_mask32 & FLAG_COUNT_BYTES)) {
                if (c == '\b') {
                        if (column > 0)
                                column--;
@@ -38,44 +37,43 @@ static int adjust_column(int column, char c)
        return column;
 }
 
+int fold_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int fold_main(int argc, char **argv)
 {
+       char *line_out = NULL;
+       int allocated_out = 0;
        char *w_opt;
        int width = 80;
        int i;
        int errs = 0;
 
-       if(!ENABLE_DEBUG_YANK_SUSv2) {
+       if (ENABLE_INCLUDE_SUSv2) {
                /* Turn any numeric options into -w options.  */
                for (i = 1; i < argc; i++) {
                        char const *a = argv[i];
 
                        if (*a++ == '-') {
-                               if (*a == '-' && !a[1])
+                               if (*a == '-' && !a[1]) /* "--" */
                                        break;
-                               if (isdigit(*a)) {
+                               if (isdigit(*a))
                                        argv[i] = xasprintf("-w%s", a);
-                               }
                        }
                }
        }
 
-       flags = getopt32(argc, argv, "bsw:", &w_opt);
-       if (flags & FLAG_WIDTH)
+       getopt32(argv, "bsw:", &w_opt);
+       if (option_mask32 & FLAG_WIDTH)
                width = xatoul_range(w_opt, 1, 10000);
 
        argv += optind;
-       if (!*argv) {
-               *--argv = "-";
-       }
+       if (!*argv)
+               *--argv = (char*)"-";
 
        do {
-               FILE *istream = bb_wfopen_input(*argv);
+               FILE *istream = fopen_or_warn_stdin(*argv);
                int c;
                int column = 0;         /* Screen column where next char will go. */
-               int offset_out = 0;     /* Index in `line_out' for next char. */
-               static char *line_out = NULL;
-               static int allocated_out = 0;
+               int offset_out = 0;     /* Index in 'line_out' for next char. */
 
                if (istream == NULL) {
                        errs |= EXIT_FAILURE;
@@ -94,15 +92,14 @@ int fold_main(int argc, char **argv)
                                column = offset_out = 0;
                                continue;
                        }
-
-rescan:
+ rescan:
                        column = adjust_column(column, c);
 
                        if (column > width) {
                                /* This character would make the line too long.
                                   Print the line plus a newline, and make this character
                                   start the next line. */
-                               if (flags & FLAG_BREAK_SPACES) {
+                               if (option_mask32 & FLAG_BREAK_SPACES) {
                                        /* Look for the last blank. */
                                        int logical_end;
 
@@ -115,7 +112,7 @@ rescan:
                                                /* Found a blank.  Don't output the part after it. */
                                                logical_end++;
                                                fwrite(line_out, sizeof(char), (size_t) logical_end, stdout);
-                                               putchar('\n');
+                                               bb_putchar('\n');
                                                /* Move the remainder to the beginning of the next line.
                                                   The areas being copied here might overlap. */
                                                memmove(line_out, line_out + logical_end, offset_out - logical_end);
@@ -144,8 +141,8 @@ rescan:
                        fwrite(line_out, sizeof(char), (size_t) offset_out, stdout);
                }
 
-               if (ferror(istream) || bb_fclose_nonstdin(istream)) {
-                       bb_perror_msg("%s", *argv);     /* Avoid multibyte problems. */
+               if (fclose_if_not_stdin(istream)) {
+                       bb_simple_perror_msg(*argv);    /* Avoid multibyte problems. */
                        errs |= EXIT_FAILURE;
                }
        } while (*++argv);