diff options
Diffstat (limited to 'busybox/miscutils/strings.c')
-rw-r--r-- | busybox/miscutils/strings.c | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/busybox/miscutils/strings.c b/busybox/miscutils/strings.c new file mode 100644 index 000000000..92e9f0d11 --- /dev/null +++ b/busybox/miscutils/strings.c | |||
@@ -0,0 +1,156 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
2 | /* | ||
3 | * strings implementation for busybox | ||
4 | * | ||
5 | * Copyright (c) 1980, 1987 | ||
6 | * The Regents of the University of California. All rights reserved. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
16 | * General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | * | ||
22 | * Original copyright notice is retained at the end of this file. | ||
23 | * | ||
24 | * Modified for BusyBox by Erik Andersen <andersen@codepoet.org> | ||
25 | * Badly hacked by Tito Ragusa <farmatito@tiscali.it> | ||
26 | */ | ||
27 | |||
28 | #include <stdio.h> | ||
29 | #include <stdlib.h> | ||
30 | #include <string.h> | ||
31 | #include <getopt.h> | ||
32 | #include <unistd.h> | ||
33 | #include <ctype.h> | ||
34 | #include "busybox.h" | ||
35 | |||
36 | #define ISSTR(ch) (isprint(ch) || ch == '\t') | ||
37 | |||
38 | int strings_main(int argc, char **argv) | ||
39 | { | ||
40 | int n=4, c, i, opt=0, status=EXIT_SUCCESS; | ||
41 | long t=0, count; | ||
42 | FILE *file = stdin; | ||
43 | char *string=NULL; | ||
44 | const char *fmt="%s: "; | ||
45 | |||
46 | while ((i = getopt(argc, argv, "afon:")) > 0) | ||
47 | switch(i) | ||
48 | { | ||
49 | case 'a': | ||
50 | break; | ||
51 | case 'f': | ||
52 | opt+=1; | ||
53 | break; | ||
54 | case 'o': | ||
55 | opt+=2; | ||
56 | break; | ||
57 | case 'n': | ||
58 | n = bb_xgetlarg(optarg, 10, 1, INT_MAX); | ||
59 | break; | ||
60 | default: | ||
61 | bb_show_usage(); | ||
62 | } | ||
63 | |||
64 | argc -= optind; | ||
65 | argv += optind; | ||
66 | |||
67 | i=0; | ||
68 | |||
69 | string=xmalloc(n+1); | ||
70 | string[n]='\0'; | ||
71 | n-=1; | ||
72 | |||
73 | if(argc==0) | ||
74 | { | ||
75 | fmt="{%s}: "; | ||
76 | *argv=(char *)bb_msg_standard_input; | ||
77 | goto pipe; | ||
78 | } | ||
79 | |||
80 | for( ;*argv!=NULL && argc>0;argv++) | ||
81 | { | ||
82 | if((file=bb_wfopen(*argv,"r"))) | ||
83 | { | ||
84 | pipe: | ||
85 | |||
86 | count=0; | ||
87 | do{ | ||
88 | c=fgetc(file); | ||
89 | if(ISSTR(c)) | ||
90 | { | ||
91 | if(i==0) | ||
92 | t=count; | ||
93 | if(i<=n) | ||
94 | string[i]=c; | ||
95 | if(i==n) | ||
96 | { | ||
97 | if(opt == 1 || opt == 3 ) | ||
98 | printf(fmt,*argv); | ||
99 | if(opt >= 2 ) | ||
100 | printf("%7lo ", t); | ||
101 | printf("%s", string); | ||
102 | } | ||
103 | if(i>n) | ||
104 | putchar(c); | ||
105 | i++; | ||
106 | } | ||
107 | else | ||
108 | { | ||
109 | if(i>n) | ||
110 | putchar('\n'); | ||
111 | i=0; | ||
112 | } | ||
113 | count++; | ||
114 | }while(c!=EOF); | ||
115 | |||
116 | bb_fclose_nonstdin(file); | ||
117 | } | ||
118 | else | ||
119 | status=EXIT_FAILURE; | ||
120 | } | ||
121 | /*free(string);*/ | ||
122 | exit(status); | ||
123 | } | ||
124 | |||
125 | /* | ||
126 | * Copyright (c) 1980, 1987 | ||
127 | * The Regents of the University of California. All rights reserved. | ||
128 | * | ||
129 | * Redistribution and use in source and binary forms, with or without | ||
130 | * modification, are permitted provided that the following conditions | ||
131 | * are met: | ||
132 | * 1. Redistributions of source code must retain the above copyright | ||
133 | * notice, this list of conditions and the following disclaimer. | ||
134 | * 2. Redistributions in binary form must reproduce the above copyright | ||
135 | * notice, this list of conditions and the following disclaimer in the | ||
136 | * documentation and/or other materials provided with the distribution. | ||
137 | * | ||
138 | * 3. <BSD Advertising Clause omitted per the July 22, 1999 licensing change | ||
139 | * ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change> | ||
140 | * | ||
141 | * 4. Neither the name of the University nor the names of its contributors | ||
142 | * may be used to endorse or promote products derived from this software | ||
143 | * without specific prior written permission. | ||
144 | * | ||
145 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | ||
146 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
147 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
148 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | ||
149 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
150 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
151 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
152 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
153 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
154 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
155 | * SUCH DAMAGE. | ||
156 | */ | ||