svn commit: r294293 - head/usr.bin/finger

Baptiste Daroussin bapt at FreeBSD.org
Mon Jan 18 20:47:05 UTC 2016


Author: bapt
Date: Mon Jan 18 20:47:04 2016
New Revision: 294293
URL: https://svnweb.freebsd.org/changeset/base/294293

Log:
  Fix printing multibyte printing when performing a networked finger(1) request
  
  MFC after:	1 week

Modified:
  head/usr.bin/finger/net.c

Modified: head/usr.bin/finger/net.c
==============================================================================
--- head/usr.bin/finger/net.c	Mon Jan 18 20:44:29 2016	(r294292)
+++ head/usr.bin/finger/net.c	Mon Jan 18 20:47:04 2016	(r294293)
@@ -42,7 +42,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/socket.h>
 #include <sys/uio.h>
-#include <ctype.h>
+#include <wctype.h>
 #include <db.h>
 #include <err.h>
 #include <netdb.h>
@@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$");
 #include <string.h>
 #include <unistd.h>
 #include <utmpx.h>
+#include <wchar.h>
 #include "finger.h"
 
 static void cleanup(int sig);
@@ -108,7 +109,7 @@ do_protocol(const char *name, const stru
 {
 	int cnt, line_len, s;
 	FILE *fp;
-	int c, lastc;
+	wint_t c, lastc;
 	struct iovec iov[3];
 	struct msghdr msg;
 	static char slash_w[] = "/W ";
@@ -168,7 +169,7 @@ do_protocol(const char *name, const stru
 	if ((fp = fdopen(s, "r")) != NULL) {
 		cnt = 0;
 		line_len = 0;
-		while ((c = getc(fp)) != EOF) {
+		while ((c = getwc(fp)) != EOF) {
 			if (++cnt > OUTPUT_MAX) {
 				printf("\n\n Output truncated at %d bytes...\n",
 					cnt - 1);
@@ -180,7 +181,7 @@ do_protocol(const char *name, const stru
 				c = '\n';
 				lastc = '\r';
 			} else {
-				if (!isprint(c) && !isspace(c)) {
+				if (!iswprint(c) && !iswspace(c)) {
 					c &= 0x7f;
 					c |= 0x40;
 				}
@@ -191,7 +192,7 @@ do_protocol(const char *name, const stru
 					continue;
 				}
 			}
-			putchar(c);
+			putwchar(c);
 			if (c != '\n' && ++line_len > _POSIX2_LINE_MAX) {
 				putchar('\\');
 				putchar('\n');
@@ -206,7 +207,7 @@ do_protocol(const char *name, const stru
 			 */
 			warn("reading from network");
 		}
-		if (lastc != '\n')
+		if (lastc != L'\n')
 			putchar('\n');
 
 		fclose(fp);


More information about the svn-src-all mailing list