For style reason, I make another patch file.

------------- begin ---------------
--- util.c.orig Sun Mar 18 16:35:12 2001
+++ util.c      Tue Mar 20 18:12:23 2001
@@ -60,15 +60,43 @@
 prn_printable(s)
        const char *s;
 {
-       unsigned char c;
-       int n;
+       const char *p;  /* String walker. */
+       char *r, *ri;   /* Ptr for result string & walker of it. */
+       int len;
+       int dc;         /* Count down of length after 'p' . */
+       size_t sz;      /* Number of bytes been processed. */
+       wchar_t c;
 
-       for (n = 0; (c = *s) != '\0'; ++s, ++n)
-               if (isprint(c))
-                       putchar(c);
-               else
-                       putchar('?');
-       return n;
+       if (s == NULL)
+               return (0);
+       p = s;
+       dc = len = strlen(s);
+       ri = r = (char *)malloc(len + 1);
+       if (r == NULL)
+               return (0);
+
+       while (dc > 0) {
+               sz = mbtowc(&c, p, dc);
+               if (sz < 0) {           /* Not be recognized. */
+                       p++;
+                       dc--;
+                       *ri++ = '?';
+               } else {
+                       dc -= sz;
+                       if (isprint(c)) {
+                               while(sz--)
+                                       *ri++ = *p++;
+                       } else {        /* Non-printable char. */
+                               p += sz;
+                               while(sz--)
+                                       *ri++ = '?';
+                       }
+               }
+       }
+       *ri = '\0';
+       printf("%s", r);
+       free(r);
+       return (len);
 }
 
 /*

------------- end -----------------

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to