On Fri, Jan 07, 2022 at 01:43:24PM -0600, Scott Cheloha wrote:
>
> [...]
> 
> Like this?
> 
> [...]

Updated: make the for-loop update expressions match.

Index: rev.c
===================================================================
RCS file: /cvs/src/usr.bin/rev/rev.c,v
retrieving revision 1.13
diff -u -p -r1.13 rev.c
--- rev.c       10 Apr 2016 17:06:52 -0000      1.13
+++ rev.c       7 Jan 2022 21:00:11 -0000
@@ -50,9 +50,10 @@ main(int argc, char *argv[])
        FILE *fp;
        ssize_t len;
        size_t ps = 0;
-       int ch, rval;
+       int ch, multibyte, rval;
 
        setlocale(LC_CTYPE, "");
+       multibyte = MB_CUR_MAX > 1;
 
        if (pledge("stdio rpath", NULL) == -1)
                err(1, "pledge");
@@ -82,13 +83,18 @@ main(int argc, char *argv[])
                while ((len = getline(&p, &ps, fp)) != -1) {
                        if (p[len - 1] == '\n')
                                --len;
-                       for (t = p + len - 1; t >= p; --t) {
-                               if (isu8cont(*t))
-                                       continue;
-                               u = t;
-                               do {
-                                       putchar(*u);
-                               } while (isu8cont(*(++u)));
+                       if (multibyte) {
+                               for (t = p + len - 1; t >= p; t--) {
+                                       if (isu8cont(*t))
+                                               continue;
+                                       u = t;
+                                       do {
+                                               putchar(*u);
+                                       } while (isu8cont(*(++u)));
+                               }
+                       } else {
+                               for (t = p + len - 1; t >= p; t--)
+                                       putchar(*t);
                        }
                        putchar('\n');
                }
@@ -104,7 +110,7 @@ main(int argc, char *argv[])
 int
 isu8cont(unsigned char c)
 {
-       return MB_CUR_MAX > 1 && (c & (0x80 | 0x40)) == 0x80;
+       return (c & (0x80 | 0x40)) == 0x80;
 }
 
 void

Reply via email to