aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Andersen <andersen@codepoet.org>2000-02-10 07:31:15 +0000
committerErik Andersen <andersen@codepoet.org>2000-02-10 07:31:15 +0000
commit4d0543138ebb30aad55ba8083ea362eafb0aac33 (patch)
tree97c6724691dcbc940e410350b9f75d120d9f6d8b
parentfb1793f03cbc51885678ee1ce9d0e81bd0e246f7 (diff)
downloadbusybox-w32-4d0543138ebb30aad55ba8083ea362eafb0aac33.tar.gz
busybox-w32-4d0543138ebb30aad55ba8083ea362eafb0aac33.tar.bz2
busybox-w32-4d0543138ebb30aad55ba8083ea362eafb0aac33.zip
More minor touchups.
-Erik
-rw-r--r--Changelog4
-rw-r--r--editors/sed.c250
-rw-r--r--find.c8
-rw-r--r--findutils/find.c8
-rw-r--r--sed.c250
5 files changed, 258 insertions, 262 deletions
diff --git a/Changelog b/Changelog
index 42ec29618..f9ed33845 100644
--- a/Changelog
+++ b/Changelog
@@ -86,6 +86,10 @@
86 - added "skip" and "seek" to dd. 86 - added "skip" and "seek" to dd.
87 * swapoff -a was not working. Now it is. 87 * swapoff -a was not working. Now it is.
88 * init did not cleanly unmount filesystems on reboot. Now it does. 88 * init did not cleanly unmount filesystems on reboot. Now it does.
89 * "sed -ne s/foo/bar/" worked but "sed -n -e s/foo/bar/" didn't.
90 Now both work.
91 * Some architectures (PowerPc) assume chars are unsigned, so they could
92 not distinguish between EOF and '\0xFF' in sed. Sed now uses ints.
89 93
90 94
91 -Erik Andersen 95 -Erik Andersen
diff --git a/editors/sed.c b/editors/sed.c
index 3a7737e2f..608f86813 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -82,7 +82,7 @@ static inline int at_last(FILE * fp)
82 if (feof(fp)) 82 if (feof(fp))
83 return 1; 83 return 1;
84 else { 84 else {
85 char ch; 85 int ch;
86 86
87 if ((ch = fgetc(fp)) == EOF) 87 if ((ch = fgetc(fp)) == EOF)
88 res++; 88 res++;
@@ -183,129 +183,131 @@ extern int sed_main(int argc, char **argv)
183 usage(sed_usage); 183 usage(sed_usage);
184 } 184 }
185 185
186 if (**argv == '-') { 186 while (argc > 1) {
187 argc--; 187 if (**argv == '-') {
188 cp = *argv++; 188 argc--;
189 stopNow = FALSE; 189 cp = *argv++;
190 190 stopNow = FALSE;
191 while (*++cp && stopNow == FALSE) { 191
192 switch (*cp) { 192 while (*++cp && stopNow == FALSE) {
193 case 'n': 193 switch (*cp) {
194 quietFlag = TRUE; 194 case 'n':
195 break; 195 quietFlag = TRUE;
196 case 'e': 196 break;
197 if (*(cp + 1) == 0 && --argc < 0) { 197 case 'e':
198 usage(sed_usage); 198 if (*(cp + 1) == 0 && --argc < 0) {
199 } 199 usage(sed_usage);
200 if (*++cp != 's') 200 }
201 cp = *argv++; 201 if (*++cp != 's')
202 202 cp = *argv++;
203 /* Read address if present */ 203
204 SKIPSPACES(cp); 204 /* Read address if present */
205 if (*cp == '$') { 205 SKIPSPACES(cp);
206 addr_line = LAST_LINE; 206 if (*cp == '$') {
207 cp++; 207 addr_line = LAST_LINE;
208 } else { 208 cp++;
209 if (isdigit(*cp)) { /* LINE ADDRESS */ 209 } else {
210 line_s = cp; 210 if (isdigit(*cp)) { /* LINE ADDRESS */
211 while (isdigit(*cp)) 211 line_s = cp;
212 cp++; 212 while (isdigit(*cp))
213 if (cp > line_s) { 213 cp++;
214 /* numeric line */ 214 if (cp > line_s) {
215 saved = *cp; 215 /* numeric line */
216 *cp = '\0'; 216 saved = *cp;
217 addr_line = atoi(line_s); 217 *cp = '\0';
218 *cp = saved; 218 addr_line = atoi(line_s);
219 } 219 *cp = saved;
220 } else if (*cp == '/') { /* PATTERN ADDRESS */ 220 }
221 pos = addr_pattern = cp + 1; 221 } else if (*cp == '/') { /* PATTERN ADDRESS */
222 pos = strchr(pos, '/'); 222 pos = addr_pattern = cp + 1;
223 if (!pos) 223 pos = strchr(pos, '/');
224 usage(sed_usage); 224 if (!pos)
225 *pos = '\0'; 225 usage(sed_usage);
226 cp = pos + 1; 226 *pos = '\0';
227 } 227 cp = pos + 1;
228 } 228 }
229 229 }
230 SKIPSPACES(cp); 230
231 if (*cp == '!') { 231 SKIPSPACES(cp);
232 negated++; 232 if (*cp == '!') {
233 cp++; 233 negated++;
234 } 234 cp++;
235 235 }
236 /* Read command */ 236
237 237 /* Read command */
238 SKIPSPACES(cp); 238
239 switch (*cp) { 239 SKIPSPACES(cp);
240 case 's': /* REPLACE */ 240 switch (*cp) {
241 if (strlen(cp) <= 3 || *(cp + 1) != '/') 241 case 's': /* REPLACE */
242 break; 242 if (strlen(cp) <= 3 || *(cp + 1) != '/')
243 sed_f = f_replace; 243 break;
244 244 sed_f = f_replace;
245 pos = needle = cp + 2; 245
246 246 pos = needle = cp + 2;
247 for (;;) { 247
248 pos = strchr(pos, '/'); 248 for (;;) {
249 if (pos == NULL) { 249 pos = strchr(pos, '/');
250 usage(sed_usage); 250 if (pos == NULL) {
251 } 251 usage(sed_usage);
252 if (*(pos - 1) == '\\') { 252 }
253 pos++; 253 if (*(pos - 1) == '\\') {
254 continue; 254 pos++;
255 } 255 continue;
256 break; 256 }
257 } 257 break;
258 *pos = 0; 258 }
259 newNeedle = ++pos; 259 *pos = 0;
260 for (;;) { 260 newNeedle = ++pos;
261 pos = strchr(pos, '/'); 261 for (;;) {
262 if (pos == NULL) { 262 pos = strchr(pos, '/');
263 usage(sed_usage); 263 if (pos == NULL) {
264 } 264 usage(sed_usage);
265 if (*(pos - 1) == '\\') { 265 }
266 pos++; 266 if (*(pos - 1) == '\\') {
267 continue; 267 pos++;
268 } 268 continue;
269 break; 269 }
270 } 270 break;
271 *pos = 0; 271 }
272 if (pos + 2 != 0) { 272 *pos = 0;
273 while (*++pos) { 273 if (pos + 2 != 0) {
274 switch (*pos) { 274 while (*++pos) {
275 case 'i': 275 switch (*pos) {
276 ignoreCase = TRUE; 276 case 'i':
277 break; 277 ignoreCase = TRUE;
278 case 'p': 278 break;
279 printFlag = TRUE; 279 case 'p':
280 break; 280 printFlag = TRUE;
281 case 'g': 281 break;
282 break; 282 case 'g':
283 default: 283 break;
284 usage(sed_usage); 284 default:
285 } 285 usage(sed_usage);
286 } 286 }
287 } 287 }
288 cp = pos; 288 }
289 /* fprintf(stderr, "replace '%s' with '%s'\n", needle, newNeedle); */ 289 cp = pos;
290 break; 290 /* fprintf(stderr, "replace '%s' with '%s'\n", needle, newNeedle); */
291 291 break;
292 case 'a': /* APPEND */ 292
293 if (strlen(cp) < 2) 293 case 'a': /* APPEND */
294 break; 294 if (strlen(cp) < 2)
295 sed_f = f_append; 295 break;
296 appendline = ++cp; 296 sed_f = f_append;
297 /* fprintf(stderr, "append '%s'\n", appendline); */ 297 appendline = ++cp;
298 break; 298 /* fprintf(stderr, "append '%s'\n", appendline); */
299 } 299 break;
300 300 }
301 stopNow = TRUE; 301
302 break; 302 stopNow = TRUE;
303 303 break;
304 default: 304
305 usage(sed_usage); 305 default:
306 } 306 usage(sed_usage);
307 } 307 }
308 } 308 }
309 }
310 }
309 311
310 if (argc == 0) { 312 if (argc == 0) {
311 switch (sed_f) { 313 switch (sed_f) {
diff --git a/find.c b/find.c
index 6346d454f..2c1039b53 100644
--- a/find.c
+++ b/find.c
@@ -39,13 +39,7 @@ static const char find_usage[] = "find [PATH...] [EXPRESSION]\n\n"
39 "\nEXPRESSION may consist of:\n" 39 "\nEXPRESSION may consist of:\n"
40 "\t-follow\n\t\tDereference symbolic links.\n" 40 "\t-follow\n\t\tDereference symbolic links.\n"
41 "\t-name PATTERN\n\t\tFile name (with leading directories removed) matches PATTERN.\n" 41 "\t-name PATTERN\n\t\tFile name (with leading directories removed) matches PATTERN.\n"
42 "\t-print\n\t\tprint the full file name followed by a newline to stdout.\n\n" 42 "\t-print\n\t\tprint the full file name followed by a newline to stdout.\n";
43#if defined BB_REGEXP
44 "This version of find matches full regular expresions.\n";
45#else
46 "This version of find matches strings (not regular expresions).\n";
47#endif
48
49 43
50 44
51static int fileAction(const char *fileName, struct stat *statbuf) 45static int fileAction(const char *fileName, struct stat *statbuf)
diff --git a/findutils/find.c b/findutils/find.c
index 6346d454f..2c1039b53 100644
--- a/findutils/find.c
+++ b/findutils/find.c
@@ -39,13 +39,7 @@ static const char find_usage[] = "find [PATH...] [EXPRESSION]\n\n"
39 "\nEXPRESSION may consist of:\n" 39 "\nEXPRESSION may consist of:\n"
40 "\t-follow\n\t\tDereference symbolic links.\n" 40 "\t-follow\n\t\tDereference symbolic links.\n"
41 "\t-name PATTERN\n\t\tFile name (with leading directories removed) matches PATTERN.\n" 41 "\t-name PATTERN\n\t\tFile name (with leading directories removed) matches PATTERN.\n"
42 "\t-print\n\t\tprint the full file name followed by a newline to stdout.\n\n" 42 "\t-print\n\t\tprint the full file name followed by a newline to stdout.\n";
43#if defined BB_REGEXP
44 "This version of find matches full regular expresions.\n";
45#else
46 "This version of find matches strings (not regular expresions).\n";
47#endif
48
49 43
50 44
51static int fileAction(const char *fileName, struct stat *statbuf) 45static int fileAction(const char *fileName, struct stat *statbuf)
diff --git a/sed.c b/sed.c
index 3a7737e2f..608f86813 100644
--- a/sed.c
+++ b/sed.c
@@ -82,7 +82,7 @@ static inline int at_last(FILE * fp)
82 if (feof(fp)) 82 if (feof(fp))
83 return 1; 83 return 1;
84 else { 84 else {
85 char ch; 85 int ch;
86 86
87 if ((ch = fgetc(fp)) == EOF) 87 if ((ch = fgetc(fp)) == EOF)
88 res++; 88 res++;
@@ -183,129 +183,131 @@ extern int sed_main(int argc, char **argv)
183 usage(sed_usage); 183 usage(sed_usage);
184 } 184 }
185 185
186 if (**argv == '-') { 186 while (argc > 1) {
187 argc--; 187 if (**argv == '-') {
188 cp = *argv++; 188 argc--;
189 stopNow = FALSE; 189 cp = *argv++;
190 190 stopNow = FALSE;
191 while (*++cp && stopNow == FALSE) { 191
192 switch (*cp) { 192 while (*++cp && stopNow == FALSE) {
193 case 'n': 193 switch (*cp) {
194 quietFlag = TRUE; 194 case 'n':
195 break; 195 quietFlag = TRUE;
196 case 'e': 196 break;
197 if (*(cp + 1) == 0 && --argc < 0) { 197 case 'e':
198 usage(sed_usage); 198 if (*(cp + 1) == 0 && --argc < 0) {
199 } 199 usage(sed_usage);
200 if (*++cp != 's') 200 }
201 cp = *argv++; 201 if (*++cp != 's')
202 202 cp = *argv++;
203 /* Read address if present */ 203
204 SKIPSPACES(cp); 204 /* Read address if present */
205 if (*cp == '$') { 205 SKIPSPACES(cp);
206 addr_line = LAST_LINE; 206 if (*cp == '$') {
207 cp++; 207 addr_line = LAST_LINE;
208 } else { 208 cp++;
209 if (isdigit(*cp)) { /* LINE ADDRESS */ 209 } else {
210 line_s = cp; 210 if (isdigit(*cp)) { /* LINE ADDRESS */
211 while (isdigit(*cp)) 211 line_s = cp;
212 cp++; 212 while (isdigit(*cp))
213 if (cp > line_s) { 213 cp++;
214 /* numeric line */ 214 if (cp > line_s) {
215 saved = *cp; 215 /* numeric line */
216 *cp = '\0'; 216 saved = *cp;
217 addr_line = atoi(line_s); 217 *cp = '\0';
218 *cp = saved; 218 addr_line = atoi(line_s);
219 } 219 *cp = saved;
220 } else if (*cp == '/') { /* PATTERN ADDRESS */ 220 }
221 pos = addr_pattern = cp + 1; 221 } else if (*cp == '/') { /* PATTERN ADDRESS */
222 pos = strchr(pos, '/'); 222 pos = addr_pattern = cp + 1;
223 if (!pos) 223 pos = strchr(pos, '/');
224 usage(sed_usage); 224 if (!pos)
225 *pos = '\0'; 225 usage(sed_usage);
226 cp = pos + 1; 226 *pos = '\0';
227 } 227 cp = pos + 1;
228 } 228 }
229 229 }
230 SKIPSPACES(cp); 230
231 if (*cp == '!') { 231 SKIPSPACES(cp);
232 negated++; 232 if (*cp == '!') {
233 cp++; 233 negated++;
234 } 234 cp++;
235 235 }
236 /* Read command */ 236
237 237 /* Read command */
238 SKIPSPACES(cp); 238
239 switch (*cp) { 239 SKIPSPACES(cp);
240 case 's': /* REPLACE */ 240 switch (*cp) {
241 if (strlen(cp) <= 3 || *(cp + 1) != '/') 241 case 's': /* REPLACE */
242 break; 242 if (strlen(cp) <= 3 || *(cp + 1) != '/')
243 sed_f = f_replace; 243 break;
244 244 sed_f = f_replace;
245 pos = needle = cp + 2; 245
246 246 pos = needle = cp + 2;
247 for (;;) { 247
248 pos = strchr(pos, '/'); 248 for (;;) {
249 if (pos == NULL) { 249 pos = strchr(pos, '/');
250 usage(sed_usage); 250 if (pos == NULL) {
251 } 251 usage(sed_usage);
252 if (*(pos - 1) == '\\') { 252 }
253 pos++; 253 if (*(pos - 1) == '\\') {
254 continue; 254 pos++;
255 } 255 continue;
256 break; 256 }
257 } 257 break;
258 *pos = 0; 258 }
259 newNeedle = ++pos; 259 *pos = 0;
260 for (;;) { 260 newNeedle = ++pos;
261 pos = strchr(pos, '/'); 261 for (;;) {
262 if (pos == NULL) { 262 pos = strchr(pos, '/');
263 usage(sed_usage); 263 if (pos == NULL) {
264 } 264 usage(sed_usage);
265 if (*(pos - 1) == '\\') { 265 }
266 pos++; 266 if (*(pos - 1) == '\\') {
267 continue; 267 pos++;
268 } 268 continue;
269 break; 269 }
270 } 270 break;
271 *pos = 0; 271 }
272 if (pos + 2 != 0) { 272 *pos = 0;
273 while (*++pos) { 273 if (pos + 2 != 0) {
274 switch (*pos) { 274 while (*++pos) {
275 case 'i': 275 switch (*pos) {
276 ignoreCase = TRUE; 276 case 'i':
277 break; 277 ignoreCase = TRUE;
278 case 'p': 278 break;
279 printFlag = TRUE; 279 case 'p':
280 break; 280 printFlag = TRUE;
281 case 'g': 281 break;
282 break; 282 case 'g':
283 default: 283 break;
284 usage(sed_usage); 284 default:
285 } 285 usage(sed_usage);
286 } 286 }
287 } 287 }
288 cp = pos; 288 }
289 /* fprintf(stderr, "replace '%s' with '%s'\n", needle, newNeedle); */ 289 cp = pos;
290 break; 290 /* fprintf(stderr, "replace '%s' with '%s'\n", needle, newNeedle); */
291 291 break;
292 case 'a': /* APPEND */ 292
293 if (strlen(cp) < 2) 293 case 'a': /* APPEND */
294 break; 294 if (strlen(cp) < 2)
295 sed_f = f_append; 295 break;
296 appendline = ++cp; 296 sed_f = f_append;
297 /* fprintf(stderr, "append '%s'\n", appendline); */ 297 appendline = ++cp;
298 break; 298 /* fprintf(stderr, "append '%s'\n", appendline); */
299 } 299 break;
300 300 }
301 stopNow = TRUE; 301
302 break; 302 stopNow = TRUE;
303 303 break;
304 default: 304
305 usage(sed_usage); 305 default:
306 } 306 usage(sed_usage);
307 } 307 }
308 } 308 }
309 }
310 }
309 311
310 if (argc == 0) { 312 if (argc == 0) {
311 switch (sed_f) { 313 switch (sed_f) {