diff options
| author | Eric Andersen <andersen@codepoet.org> | 2000-07-05 17:26:35 +0000 |
|---|---|---|
| committer | Eric Andersen <andersen@codepoet.org> | 2000-07-05 17:26:35 +0000 |
| commit | f7cf2f7ef98077c59e4da4bc25de38c22174ac9d (patch) | |
| tree | a2fa5e67df2ccd2881a21ed4d22c6f7453b793b2 /coreutils | |
| parent | 57ebebfb01a9a29378b2f0179724661bfc5402e9 (diff) | |
| download | busybox-w32-f7cf2f7ef98077c59e4da4bc25de38c22174ac9d.tar.gz busybox-w32-f7cf2f7ef98077c59e4da4bc25de38c22174ac9d.tar.bz2 busybox-w32-f7cf2f7ef98077c59e4da4bc25de38c22174ac9d.zip | |
* Fix to tr so it recognizes standard escape sequences. Merged common
escape seq. code from tr and echo into utility.c. Fix thanks to
Matt Kraai <kraai@alumni.carnegiemellon.edu>.
* This should close Bug #1015. Please test.
-Erik
Diffstat (limited to 'coreutils')
| -rw-r--r-- | coreutils/echo.c | 28 | ||||
| -rw-r--r-- | coreutils/tr.c | 12 |
2 files changed, 7 insertions, 33 deletions
diff --git a/coreutils/echo.c b/coreutils/echo.c index 4659e4bc6..6e279d1c6 100644 --- a/coreutils/echo.c +++ b/coreutils/echo.c | |||
| @@ -40,7 +40,7 @@ extern int | |||
| 40 | echo_main(int argc, char** argv) | 40 | echo_main(int argc, char** argv) |
| 41 | { | 41 | { |
| 42 | register char **ap; | 42 | register char **ap; |
| 43 | register char *p; | 43 | char *p; |
| 44 | register char c; | 44 | register char c; |
| 45 | int nflag = 0; | 45 | int nflag = 0; |
| 46 | int eflag = 0; | 46 | int eflag = 0; |
| @@ -65,28 +65,10 @@ echo_main(int argc, char** argv) | |||
| 65 | while ((p = *ap++) != NULL) { | 65 | while ((p = *ap++) != NULL) { |
| 66 | while ((c = *p++) != '\0') { | 66 | while ((c = *p++) != '\0') { |
| 67 | if (c == '\\' && eflag) { | 67 | if (c == '\\' && eflag) { |
| 68 | switch (c = *p++) { | 68 | if (*p == 'c') |
| 69 | case 'a': c = '\007'; break; | 69 | exit(0); |
| 70 | case 'b': c = '\b'; break; | 70 | else |
| 71 | case 'c': exit( 0); /* exit */ | 71 | c = process_escape_sequence(&p); |
| 72 | case 'f': c = '\f'; break; | ||
| 73 | case 'n': c = '\n'; break; | ||
| 74 | case 'r': c = '\r'; break; | ||
| 75 | case 't': c = '\t'; break; | ||
| 76 | case 'v': c = '\v'; break; | ||
| 77 | case '\\': break; /* c = '\\' */ | ||
| 78 | case '0': case '1': case '2': case '3': | ||
| 79 | case '4': case '5': case '6': case '7': | ||
| 80 | c -= '0'; | ||
| 81 | if (*p >= '0' && *p <= '7') | ||
| 82 | c = c * 8 + (*p++ - '0'); | ||
| 83 | if (*p >= '0' && *p <= '7') | ||
| 84 | c = c * 8 + (*p++ - '0'); | ||
| 85 | break; | ||
| 86 | default: | ||
| 87 | p--; | ||
| 88 | break; | ||
| 89 | } | ||
| 90 | } | 72 | } |
| 91 | putchar(c); | 73 | putchar(c); |
| 92 | } | 74 | } |
diff --git a/coreutils/tr.c b/coreutils/tr.c index 3e7ba583c..48cdd47bd 100644 --- a/coreutils/tr.c +++ b/coreutils/tr.c | |||
| @@ -111,22 +111,14 @@ static void map(register unsigned char *string1, register unsigned char *string2 | |||
| 111 | } | 111 | } |
| 112 | } | 112 | } |
| 113 | 113 | ||
| 114 | static void expand(register char *arg, register unsigned char *buffer) | 114 | static void expand(char *arg, register unsigned char *buffer) |
| 115 | { | 115 | { |
| 116 | int i, ac; | 116 | int i, ac; |
| 117 | 117 | ||
| 118 | while (*arg) { | 118 | while (*arg) { |
| 119 | if (*arg == '\\') { | 119 | if (*arg == '\\') { |
| 120 | arg++; | 120 | arg++; |
| 121 | i = ac = 0; | 121 | *buffer++ = process_escape_sequence(&arg); |
| 122 | if (*arg >= '0' && *arg <= '7') { | ||
| 123 | do { | ||
| 124 | ac = (ac << 3) + *arg++ - '0'; | ||
| 125 | i++; | ||
| 126 | } while (i < 4 && *arg >= '0' && *arg <= '7'); | ||
| 127 | *buffer++ = ac; | ||
| 128 | } else if (*arg != '\0') | ||
| 129 | *buffer++ = *arg++; | ||
| 130 | } else if (*arg == '[') { | 122 | } else if (*arg == '[') { |
| 131 | arg++; | 123 | arg++; |
| 132 | i = *arg++; | 124 | i = *arg++; |
