summaryrefslogtreecommitdiffstats
path: root/abs/extra/mingetty/mingetty-utf8.patch
diff options
context:
space:
mode:
Diffstat (limited to 'abs/extra/mingetty/mingetty-utf8.patch')
-rw-r--r--abs/extra/mingetty/mingetty-utf8.patch158
1 files changed, 0 insertions, 158 deletions
diff --git a/abs/extra/mingetty/mingetty-utf8.patch b/abs/extra/mingetty/mingetty-utf8.patch
deleted file mode 100644
index c269039..0000000
--- a/abs/extra/mingetty/mingetty-utf8.patch
+++ /dev/null
@@ -1,158 +0,0 @@
-diff -Nru mingetty-1.07.orig/mingetty.c mingetty-1.07/mingetty.c
---- mingetty-1.07.orig/mingetty.c 2004-01-03 15:15:56.000000000 +0200
-+++ mingetty-1.07/mingetty.c 2006-11-22 22:13:26.967910100 +0200
-@@ -16,10 +16,15 @@
- * - autologin only at first login
- * - /etc/mingetty.conf that can be used instead of /etc/inittab for
- * command line options
-- * - Can UTF-8 setup be done within mingetty?
-+ * - Can UTF-8 setup be done within mingetty? Let's try now :-) (VinzC)
- * - Also add /bin/login-type functionality in here?
- */
-
-+/* Additional comments: Vincent Cadet <vcadet@hotmail.com> (2006-11-21)
-+ * - Attempt to make mingetty support UTF-8. Modifications were imported
-+ * from Suse migetty.c 0.9.6s.
-+ */
-+
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
-@@ -39,6 +44,19 @@
- #include <syslog.h>
- #include <sys/utsname.h>
- #include <time.h>
-+#include <locale.h>
-+#include <iconv.h>
-+#include <wctype.h>
-+#include <sys/kd.h>
-+#include <sys/ttydefaults.h>
-+
-+#ifndef IUTF8
-+# ifndef ASM_IUTF8
-+# error ASM_IUTF8 input flag not defined - Cannot define IUTF8
-+# else
-+# define IUTF8 ASM_IUTF8
-+# endif
-+#endif
-
- /* name of this program (argv[0]) */
- static char *progname;
-@@ -74,6 +92,8 @@
- static char *autologin = NULL;
- /* try to read a char before dropping to login prompt */
- static int loginpause = 0;
-+/* terminal mode */
-+static int mode = K_RAW;
-
- /* error() - output error messages */
- static void error (const char *fmt, ...)
-@@ -187,10 +207,21 @@
- if (fd > 2)
- close (fd);
-
-+ /* Detect mode of current keyboard setup, e.g. for UTF-8 */
-+ if (ioctl(0, KDGKBMODE, &mode) < 0)
-+ mode = K_RAW;
-+
- /* Write a reset string to the terminal. This is very linux-specific
- and should be checked for other systems. */
- if (noclear == 0)
-- write (0, "\033c", 2);
-+ /* don't write a full reset (ESC c) because this leaves the
-+ unicode mode again if the terminal was in unicode mode
-+ and also undos the ESC sequences in CONSOLE_MAGIC which
-+ are needed for some languages/console-fonts.
-+ Just put the cursor to the home position (ESC [ H),
-+ erase everything below the cursor (ESC [ J), and set the
-+ scrolling region to the full window (ESC [ r) */
-+ write (0, "\033[r\033[H\033[J", 9);
-
- sigaction (SIGHUP, &sa_old, NULL);
- }
-@@ -292,32 +323,75 @@
-
- static char *get_logname (void)
- {
-- static char logname[40];
-+ static char logname[4*UT_NAMESIZE];
- char *bp;
- unsigned char c;
-+ int ascii;
-+ iconv_t ic;
-
- tcflush (0, TCIFLUSH); /* flush pending input */
-+
-+ /* Check for UTF-8 mode */
-+ switch(mode) {
-+ case K_UNICODE:
-+ ascii = 0;
-+ setlocale(LC_CTYPE, "en_US.UTF-8");
-+ break;
-+ case K_RAW:
-+ case K_MEDIUMRAW:
-+ case K_XLATE:
-+ default:
-+ ascii = 1;
-+ setlocale(LC_CTYPE, "POSIX");
-+ break;
-+ }
-+
- for (*logname = 0; *logname == 0;) {
- do_prompt (1);
- for (bp = logname;;) {
- if (read (0, &c, 1) < 1) {
-- if (errno == EINTR || errno == EIO
-- || errno == ENOENT)
-+ if (errno == EINTR || errno == EAGAIN) {
-+ usleep(1000);
-+ continue;
-+ }
-+ if (errno == EIO || errno == ENOENT)
- exit (EXIT_SUCCESS);
- error ("%s: read: %s", tty, strerror (errno));
- }
- if (c == '\n' || c == '\r') {
- *bp = 0;
- break;
-- } else if (!isprint (c))
-- error ("%s: invalid character 0x%x in login"
-- " name", tty, c);
-+ }
-+
-+ if (ascii && !isprint (c))
-+ error ("%s: invalid character 0x%x in login name", tty, c);
- else if ((size_t)(bp - logname) >= sizeof (logname) - 1)
- error ("%s: too long login name", tty);
-- else
-- *bp++ = c;
-+
-+ *bp++ = c;
- }
- }
-+
-+ if (!ascii && (ic = iconv_open("WCHAR_T", "UTF-8"))) {
-+ char tmpbuf[4*sizeof(logname)], *op, *lp;
-+ size_t len = bp - logname;
-+ size_t out = sizeof(tmpbuf) - 1;
-+ size_t wcl;
-+ wint_t *wcp;
-+
-+ op = tmpbuf;
-+ lp = logname;
-+ if ((wcl = iconv(ic , &lp, &len, &op, &out)) == (size_t)-1)
-+ error ("%s: invalid character conversion for login name", tty);
-+ iconv_close(ic);
-+
-+ wcp = (wint_t*)tmpbuf;
-+ wcp[wcl] = (wint_t)0;
-+ while (*wcp) {
-+ if (!iswprint(*wcp++))
-+ error ("%s: invalid character for login name found", tty);
-+ }
-+ }
- return logname;
- }
-
-
-