diff options
-rw-r--r-- | Changelog | 16 | ||||
-rw-r--r-- | coreutils/tr.c | 18 | ||||
-rw-r--r-- | tr.c | 18 |
3 files changed, 42 insertions, 10 deletions
@@ -1,3 +1,19 @@ +0.53pre + + Critical Bugfixes: + * None yet + + New Applets: + * None yet + + Other Changes: + * Vladimir Oleynik -- Fixed tr to support 'tr a-z A-Z' syntax. + + + -Not Yet Released + + + 0.52 Critical Bugfixes: diff --git a/coreutils/tr.c b/coreutils/tr.c index a5d0682..5b7b8d0 100644 --- a/coreutils/tr.c +++ b/coreutils/tr.c @@ -54,7 +54,7 @@ static void convert() if (in_index == read_chars) { if ((read_chars = read(0, (char *) pinput, BUFSIZ)) <= 0) { if (write(1, (char *) poutput, out_index) != out_index) - write(2, write_error, strlen(write_error)); + error_msg("%s", write_error); exit(0); } in_index = 0; @@ -67,10 +67,8 @@ static void convert() continue; poutput[out_index++] = last = coded; if (out_index == BUFSIZ) { - if (write(1, (char *) poutput, out_index) != out_index) { - write(2, write_error, strlen(write_error)); - exit(1); - } + if (write(1, (char *) poutput, out_index) != out_index) + error_msg_and_die("%s", write_error); out_index = 0; } } @@ -105,6 +103,16 @@ static unsigned int expand(const char *arg, register unsigned char *buffer) if (*arg == '\\') { arg++; *buffer++ = process_escape_sequence(&arg); + } else if (*(arg+1) == '-') { + ac = *(arg+2); + if(ac == 0) { + *buffer++ = *arg++; + continue; + } + i = *arg; + while (i <= ac) + *buffer++ = i++; + arg += 3; /* Skip the assumed a-z */ } else if (*arg == '[') { arg++; i = *arg++; @@ -54,7 +54,7 @@ static void convert() if (in_index == read_chars) { if ((read_chars = read(0, (char *) pinput, BUFSIZ)) <= 0) { if (write(1, (char *) poutput, out_index) != out_index) - write(2, write_error, strlen(write_error)); + error_msg("%s", write_error); exit(0); } in_index = 0; @@ -67,10 +67,8 @@ static void convert() continue; poutput[out_index++] = last = coded; if (out_index == BUFSIZ) { - if (write(1, (char *) poutput, out_index) != out_index) { - write(2, write_error, strlen(write_error)); - exit(1); - } + if (write(1, (char *) poutput, out_index) != out_index) + error_msg_and_die("%s", write_error); out_index = 0; } } @@ -105,6 +103,16 @@ static unsigned int expand(const char *arg, register unsigned char *buffer) if (*arg == '\\') { arg++; *buffer++ = process_escape_sequence(&arg); + } else if (*(arg+1) == '-') { + ac = *(arg+2); + if(ac == 0) { + *buffer++ = *arg++; + continue; + } + i = *arg; + while (i <= ac) + *buffer++ = i++; + arg += 3; /* Skip the assumed a-z */ } else if (*arg == '[') { arg++; i = *arg++; |