From: Sami Kerola Date: Sun, 28 Jul 2013 21:11:21 +0000 (+0100) Subject: rev: use string printing rather than character output X-Git-Tag: v2.24-rc1~410 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4b4eb34004378fe70259acd8f2f859e7b5cc3726;p=thirdparty%2Futil-linux.git rev: use string printing rather than character output Fliping a string in memory, and printing it with multibyte output function makes the command about 1/3 quicker. Signed-off-by: Sami Kerola --- diff --git a/text-utils/rev.c b/text-utils/rev.c index 1c440366c6..85e16306b3 100644 --- a/text-utils/rev.c +++ b/text-utils/rev.c @@ -86,10 +86,20 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); } +static void reverse_str(wchar_t *str, size_t n) +{ + size_t i; + + for (i = 0; i < n / 2; ++i) { + wchar_t tmp = str[i]; + str[i] = str[n - 1 - i]; + str[n - 1 - i] = tmp; + } +} + int main(int argc, char *argv[]) { char *filename = "stdin"; - wchar_t *t; size_t len, bufsiz = BUFSIZ; FILE *fp = stdin; int ch, rval = EXIT_SUCCESS; @@ -153,13 +163,8 @@ int main(int argc, char *argv[]) len = wcslen(buf); } - - if (*(t = buf + len - 1) == '\n') - --t; - for ( ; buf <= t; --t) - putwchar(*t); - if (!feof(fp)) - putwchar('\n'); + reverse_str(buf, len - 1); + fputws(buf, stdout); } if (ferror(fp)) { warn("%s", filename);