Changeset 1770 in MondoRescue for branches/stable/mindi-busybox/miscutils/strings.c
- Timestamp:
- Nov 6, 2007, 11:01:53 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/stable/mindi-busybox/miscutils/strings.c
r821 r1770 3 3 * strings implementation for busybox 4 4 * 5 * Copyright (c) 1980, 1987 6 * The Regents of the University of California. All rights reserved. 5 * Copyright Tito Ragusa <farmatito@tiscali.it> 7 6 * 8 7 * 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>14 8 */ 15 9 16 #include "busybox.h"17 #include <stdio.h>18 #include <stdlib.h>19 10 #include <getopt.h> 20 #include <ctype.h> 11 12 #include "libbb.h" 21 13 22 14 #define WHOLE_FILE 1 … … 25 17 #define SIZE 8 26 18 19 int strings_main(int argc, char **argv); 27 20 int strings_main(int argc, char **argv) 28 21 { 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; 32 26 FILE *file = stdin; 33 27 char *string; 34 28 const char *fmt = "%s: "; 35 c har *n_arg = "4";29 const char *n_arg = "4"; 36 30 37 opt = bb_getopt_ulflags(argc,argv, "afon:", &n_arg);31 opt = getopt32(argv, "afon:", &n_arg); 38 32 /* -a is our default behaviour */ 39 40 argc -= optind; 33 /*argc -= optind;*/ 41 34 argv += optind; 42 35 43 n = bb_xgetlarg(n_arg, 10, 1, INT_MAX);36 n = xatou_range(n_arg, 1, INT_MAX); 44 37 string = xzalloc(n + 1); 45 38 n--; 46 39 47 if ( argc == 0) {40 if (!*argv) { 48 41 fmt = "{%s}: "; 49 * argv = (char *)bb_msg_standard_input;42 *--argv = (char *)bb_msg_standard_input; 50 43 goto PIPE; 51 44 } 52 45 53 46 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) { 66 63 if (opt & PRINT_NAME) { 67 64 printf(fmt, *argv); 68 65 } 69 66 if (opt & PRINT_OFFSET) { 70 printf("%7 lo ", count - n);67 printf("%7"OFF_FMT"o ", offset - n); 71 68 } 72 printf("%s", string);69 fputs(string, stdout); 73 70 } 74 i++; 75 } else { 76 if (i > n) { 77 putchar('\n'); 78 } 79 i = 0; 71 count++; 80 72 } 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); 88 83 89 84 if (ENABLE_FEATURE_CLEAN_UP) 90 85 free(string); 91 86 92 bb_fflush_stdout_and_exit(status);87 fflush_stdout_and_exit(status); 93 88 } 94 95 /*96 * Copyright (c) 1980, 198797 * The Regents of the University of California. All rights reserved.98 *99 * Redistribution and use in source and binary forms, with or without100 * modification, are permitted provided that the following conditions101 * are met:102 * 1. Redistributions of source code must retain the above copyright103 * notice, this list of conditions and the following disclaimer.104 * 2. Redistributions in binary form must reproduce the above copyright105 * notice, this list of conditions and the following disclaimer in the106 * documentation and/or other materials provided with the distribution.107 *108 * 3. <BSD Advertising Clause omitted per the July 22, 1999 licensing change109 * 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 contributors112 * may be used to endorse or promote products derived from this software113 * without specific prior written permission.114 *115 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND116 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE117 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE118 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE119 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL120 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS121 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)122 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT123 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY124 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF125 * SUCH DAMAGE.126 */
Note:
See TracChangeset
for help on using the changeset viewer.