Ignore:
Timestamp:
Nov 4, 2007, 3:16:40 AM (16 years ago)
Author:
Bruno Cornec
Message:

Update to busybox 1.7.2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.5/mindi-busybox/miscutils/strings.c

    r821 r1765  
    33 * strings implementation for busybox
    44 *
    5  * Copyright (c) 1980, 1987
    6  *  The Regents of the University of California.  All rights reserved.
     5 * Copyright Tito Ragusa <farmatito@tiscali.it>
    76 *
    87 * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
    9  *
    10  * Original copyright notice is retained at the end of this file.
    11  *
    12  * Modified for BusyBox by Erik Andersen <andersen@codepoet.org>
    13  * Badly hacked by Tito Ragusa <farmatito@tiscali.it>
    148 */
    159
    16 #include "busybox.h"
    17 #include <stdio.h>
    18 #include <stdlib.h>
    1910#include <getopt.h>
    20 #include <ctype.h>
     11
     12#include "libbb.h"
    2113
    2214#define WHOLE_FILE      1
     
    2517#define SIZE            8
    2618
     19int strings_main(int argc, char **argv);
    2720int strings_main(int argc, char **argv)
    2821{
    29     int n, c, i = 0, status = EXIT_SUCCESS;
    30     unsigned long opt;
    31     unsigned long count;
     22    int n, c, status = EXIT_SUCCESS;
     23    unsigned opt;
     24    unsigned count;
     25    off_t offset;
    3226    FILE *file = stdin;
    3327    char *string;
    3428    const char *fmt = "%s: ";
    35     char *n_arg = "4";
     29    const char *n_arg = "4";
    3630
    37     opt = bb_getopt_ulflags(argc, argv, "afon:", &n_arg);
     31    opt = getopt32(argv, "afon:", &n_arg);
    3832    /* -a is our default behaviour */
    39 
    40     argc -= optind;
     33    /*argc -= optind;*/
    4134    argv += optind;
    4235
    43     n = bb_xgetlarg(n_arg, 10, 1, INT_MAX);
     36    n = xatou_range(n_arg, 1, INT_MAX);
    4437    string = xzalloc(n + 1);
    4538    n--;
    4639
    47     if (argc == 0) {
     40    if (!*argv) {
    4841        fmt = "{%s}: ";
    49         *argv = (char *)bb_msg_standard_input;
     42        *--argv = (char *)bb_msg_standard_input;
    5043        goto PIPE;
    5144    }
    5245
    5346    do {
    54         if ((file = bb_wfopen(*argv, "r"))) {
    55 PIPE:
    56             count = 0;
    57             do {
    58                 c = fgetc(file);
    59                 if (isprint(c) || c == '\t') {
    60                     if (i <= n) {
    61                         string[i] = c;
    62                     } else {
    63                         putchar(c);
    64                     }
    65                     if (i == n) {
     47        file = fopen_or_warn(*argv, "r");
     48        if (!file) {
     49            status = EXIT_FAILURE;
     50            continue;
     51        }
     52 PIPE:
     53        offset = 0;
     54        count = 0;
     55        do {
     56            c = fgetc(file);
     57            if (isprint(c) || c == '\t') {
     58                if (count > n) {
     59                    putchar(c);
     60                } else {
     61                    string[count] = c;
     62                    if (count == n) {
    6663                        if (opt & PRINT_NAME) {
    6764                            printf(fmt, *argv);
    6865                        }
    6966                        if (opt & PRINT_OFFSET) {
    70                             printf("%7lo ", count - n);
     67                            printf("%7"OFF_FMT"o ", offset - n);
    7168                        }
    72                         printf("%s", string);
     69                        fputs(string, stdout);
    7370                    }
    74                     i++;
    75                 } else {
    76                     if (i > n) {
    77                         putchar('\n');
    78                     }
    79                     i = 0;
     71                    count++;
    8072                }
    81                 count++;
    82             } while (c != EOF);
    83             bb_fclose_nonstdin(file);
    84         } else {
    85             status = EXIT_FAILURE;
    86         }
    87     } while (--argc > 0);
     73            } else {
     74                if (count > n) {
     75                    putchar('\n');
     76                }
     77                count = 0;
     78            }
     79            offset++;
     80        } while (c != EOF);
     81        fclose_if_not_stdin(file);
     82    } while (*++argv);
    8883
    8984    if (ENABLE_FEATURE_CLEAN_UP)
    9085        free(string);
    9186
    92     bb_fflush_stdout_and_exit(status);
     87    fflush_stdout_and_exit(status);
    9388}
    94 
    95 /*
    96  * Copyright (c) 1980, 1987
    97  *  The Regents of the University of California.  All rights reserved.
    98  *
    99  * Redistribution and use in source and binary forms, with or without
    100  * modification, are permitted provided that the following conditions
    101  * are met:
    102  * 1. Redistributions of source code must retain the above copyright
    103  *    notice, this list of conditions and the following disclaimer.
    104  * 2. Redistributions in binary form must reproduce the above copyright
    105  *    notice, this list of conditions and the following disclaimer in the
    106  *    documentation and/or other materials provided with the distribution.
    107  *
    108  * 3. <BSD Advertising Clause omitted per the July 22, 1999 licensing change
    109  *      ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change>
    110  *
    111  * 4. Neither the name of the University nor the names of its contributors
    112  *    may be used to endorse or promote products derived from this software
    113  *    without specific prior written permission.
    114  *
    115  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    116  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    117  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    118  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    119  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    120  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    121  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    122  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    123  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    124  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    125  * SUCH DAMAGE.
    126  */
Note: See TracChangeset for help on using the changeset viewer.