X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=coreutils%2Ftr.c;h=cea3b05b6bc84049a1934e7733f61ce9b104d8be;hb=ec1a4b5a521b5adf295bc757c25231910f8c854b;hp=594962f926554ccff7fdb42478f9e9511eb3b8e6;hpb=cd545287c5335cf13006b646ca44597acc5e384b;p=oweals%2Fbusybox.git diff --git a/coreutils/tr.c b/coreutils/tr.c index 594962f92..cea3b05b6 100644 --- a/coreutils/tr.c +++ b/coreutils/tr.c @@ -18,14 +18,16 @@ #include "busybox.h" +// Even with -funsigned-char, gcc still complains about char as an array index. + +#define GCC4_IS_STUPID int + #define ASCII 0377 /* some "globals" shared across this file */ static char com_fl, del_fl, sq_fl; /* these last are pointers to static buffers declared in tr_main */ -static unsigned char *poutput; -static unsigned char *pvector; -static unsigned char *pinvec, *poutvec; +static char *poutput, *pvector, *pinvec, *poutvec; static void convert(void) { @@ -60,17 +62,17 @@ static void convert(void) /* NOTREACHED */ } -static void map(register unsigned char *string1, unsigned int string1_len, - register unsigned char *string2, unsigned int string2_len) +static void map(char *string1, unsigned int string1_len, + char *string2, unsigned int string2_len) { - unsigned char last = '0'; + char last = '0'; unsigned int i, j; for (j = 0, i = 0; i < string1_len; i++) { if (string2_len <= j) - pvector[string1[i]] = last; + pvector[(GCC4_IS_STUPID)string1[i]] = last; else - pvector[string1[i]] = last = string2[j++]; + pvector[(GCC4_IS_STUPID)string1[i]] = last = string2[j++]; } } @@ -79,9 +81,9 @@ static void map(register unsigned char *string1, unsigned int string1_len, * Escapes, e.g., \a ==> Control-G * Character classes, e.g. [:upper:] ==> A ... Z */ -static unsigned int expand(const char *arg, register unsigned char *buffer) +static unsigned int expand(const char *arg, char *buffer) { - unsigned char *buffer_start = buffer; + char *buffer_start = buffer; int i, ac; while (*arg) { @@ -126,7 +128,7 @@ static unsigned int expand(const char *arg, register unsigned char *buffer) for (i = 'A'; i <= 'Z'; i++) *buffer++ = i; else if (strncmp(arg, "space", 5) == 0) { - const char s[] = "\t\n\v\f\r "; + const char s[] = "\t\n\v\f\r "; strcat((char*)buffer, s); buffer += sizeof(s) - 1; } @@ -174,9 +176,9 @@ static unsigned int expand(const char *arg, register unsigned char *buffer) return (buffer - buffer_start); } -static int complement(unsigned char *buffer, int buffer_len) +static int complement(char *buffer, int buffer_len) { - register short i, j, ix; + short i, j, ix; char conv[ASCII + 2]; ix = 0; @@ -191,9 +193,10 @@ static int complement(unsigned char *buffer, int buffer_len) return ix; } +int tr_main(int argc, char **argv); int tr_main(int argc, char **argv) { - register unsigned char *ptr; + unsigned char *ptr; int output_length=0, input_length; int idx = 1; int i; @@ -203,10 +206,10 @@ int tr_main(int argc, char **argv) RESERVE_CONFIG_BUFFER(outvec, ASCII+1); /* ... but make them available globally */ - poutput = (unsigned char*)output; - pvector = (unsigned char*)vector; - pinvec = (unsigned char*)invec; - poutvec = (unsigned char*)outvec; + poutput = output; + pvector = vector; + pinvec = invec; + poutvec = outvec; if (argc > 1 && argv[idx][0] == '-') { for (ptr = (unsigned char *) &argv[idx][1]; *ptr; ptr++) { @@ -238,14 +241,14 @@ int tr_main(int argc, char **argv) if (argv[idx] != NULL) { if (*argv[idx] == '\0') bb_error_msg_and_die("STRING2 cannot be empty"); - output_length = expand(argv[idx], (unsigned char*)output); - map(bb_common_bufsiz1, input_length, (unsigned char*)output, output_length); + output_length = expand(argv[idx], output); + map(bb_common_bufsiz1, input_length, output, output_length); } for (i = 0; i < input_length; i++) - invec[bb_common_bufsiz1[i]] = TRUE; + invec[(GCC4_IS_STUPID)bb_common_bufsiz1[i]] = TRUE; for (i = 0; i < output_length; i++) - outvec[(unsigned char)output[i]] = TRUE; + outvec[(GCC4_IS_STUPID)output[i]] = TRUE; } convert(); - return (0); + return 0; }