patch-1.3.96 linux/arch/m68k/kernel/console.c

Next file: linux/arch/m68k/kernel/entry.S
Previous file: linux/arch/m68k/ifpsp060/iskeleton.S
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v1.3.95/linux/arch/m68k/kernel/console.c linux/arch/m68k/kernel/console.c
@@ -1561,7 +1561,7 @@
                            where we really draw the chars */
 
                         if (count > 2 &&
-			    !decim && currcons == fg_console) { 
+			    !decim && !utf && currcons == fg_console) { 
 				static char putcs_buf[256];
 				char   *p     = putcs_buf;
 				int putcs_count  = 1;
@@ -1582,14 +1582,25 @@
 				
 				while (count)
 				{
+					enable_bh(CONSOLE_BH);
 					c = from_user ? get_user(buf) : *buf;
+					disable_bh(CONSOLE_BH);
 					tc = translate[toggle_meta ? (c|0x80) : c];
 					if (!tc ||
 					    !(c >= 32
-					      || (disp_ctrl && c != 0x1b)
-					      || !((CTRL_ACTION >> c) & 1)))
+					      || !(((disp_ctrl ? CTRL_ALWAYS
+						   : CTRL_ACTION) >> c) & 1)))
 					  break;
+					tc = conv_uni_to_pc(tc);
+					if (tc == -4)
+					  tc = conv_uni_to_pc(0xfffd);
+					else if (tc == -3)
+					  tc = c;
+
 					buf++; n++; count--;
+					if (tc & ~console_charmask)
+					  continue; /* Conversion failed */
+
 					*p++ = tc;
 					*pos++ = tc | (attr << 8);
 					++putcs_count;

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov with Sam's (original) version
of this