X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=coreutils%2Ftr.c;h=a00e3613427318e10eabffa07c867c250cad5610;hb=138d71bc35b86964a4c2bd97f7f578edfead1925;hp=a5d068262bb636488e1ed6adf7ffb70a1bc3ef3f;hpb=22ecf049b634ccd507ed0587526599ed1971c308;p=oweals%2Fbusybox.git diff --git a/coreutils/tr.c b/coreutils/tr.c index a5d068262..a00e36134 100644 --- a/coreutils/tr.c +++ b/coreutils/tr.c @@ -44,7 +44,7 @@ static unsigned char *pvector; static char *pinvec, *poutvec; -static void convert() +static void convert(void) { short read_chars = 0; short c, coded; @@ -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)); + bb_error_msg(bb_msg_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) + bb_error_msg_and_die(bb_msg_write_error); out_index = 0; } } @@ -104,7 +102,17 @@ static unsigned int expand(const char *arg, register unsigned char *buffer) while (*arg) { if (*arg == '\\') { arg++; - *buffer++ = process_escape_sequence(&arg); + *buffer++ = bb_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++; @@ -147,11 +155,11 @@ extern int tr_main(int argc, char **argv) int output_length=0, input_length; int idx = 1; int i; - RESERVE_BB_BUFFER(output, BUFSIZ); - RESERVE_BB_BUFFER(input, BUFSIZ); - RESERVE_BB_UBUFFER(vector, ASCII+1); - RESERVE_BB_BUFFER(invec, ASCII+1); - RESERVE_BB_BUFFER(outvec, ASCII+1); + RESERVE_CONFIG_BUFFER(output, BUFSIZ); + RESERVE_CONFIG_BUFFER(input, BUFSIZ); + RESERVE_CONFIG_UBUFFER(vector, ASCII+1); + RESERVE_CONFIG_BUFFER(invec, ASCII+1); + RESERVE_CONFIG_BUFFER(outvec, ASCII+1); /* ... but make them available globally */ poutput = output; @@ -173,7 +181,7 @@ extern int tr_main(int argc, char **argv) sq_fl = TRUE; break; default: - show_usage(); + bb_show_usage(); } } idx++; @@ -189,7 +197,7 @@ extern int tr_main(int argc, char **argv) input_length = complement(input, input_length); if (argv[idx] != NULL) { if (*argv[idx] == '\0') - error_msg_and_die("STRING2 cannot be empty"); + bb_error_msg_and_die("STRING2 cannot be empty"); output_length = expand(argv[idx], output); map(input, input_length, output, output_length); }