Date: Tue, 20 Mar 2001 18:13:20 +0000 From: thinker <thinker@branda.to> To: freebsd-current@freebsd.org Subject: Re: patch /bin/ls again, for mb supporting. Message-ID: <20010320181320.A15057@hell.branda.to> In-Reply-To: <20010320173710.A14702@hell.branda.to>; from thinker@branda.to on Tue, Mar 20, 2001 at 05:37:10PM %2B0000 References: <20010320164901.A14424@hell.branda.to> <20010320011246.O29888@fw.wintelcom.net> <20010320173710.A14702@hell.branda.to>
next in thread | previous in thread | raw e-mail | index | archive | help
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 majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010320181320.A15057>
