]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
rev: use string printing rather than character output
authorSami Kerola <kerolasa@iki.fi>
Sun, 28 Jul 2013 21:11:21 +0000 (22:11 +0100)
committerKarel Zak <kzak@redhat.com>
Thu, 1 Aug 2013 11:35:39 +0000 (13:35 +0200)
Fliping a string in memory, and printing it with multibyte output
function makes the command about 1/3 quicker.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
text-utils/rev.c

index 1c440366c6c90dc18186e32b2b3416780ace26dd..85e16306b3d201cf4321a67c50654a8b3ff20c77 100644 (file)
@@ -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);