From 4b4eb34004378fe70259acd8f2f859e7b5cc3726 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 28 Jul 2013 22:11:21 +0100 Subject: 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 --- text-utils/rev.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'text-utils/rev.c') diff --git a/text-utils/rev.c b/text-utils/rev.c index 1c440366c..85e16306b 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); -- cgit v1.2.3-55-g7522