From: Moritz Muehlenhoff Date: Wed, 18 Jul 2007 22:29:13 +0000 (+0200) Subject: util-linux / git / first attempt X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f54ad913191a9ebe7c1bf8c38582d464df88896;p=util-linux util-linux / git / first attempt git is neat. It feels like tla, only with a usable interface, less bugs and decent performance. I'm not sure if I got all the git workflow correct, however first patch attached. It's been tested and is clean and useful. (221290) Can git commits be split afterwards? If I add a diff to debian/changelog for closing a bug, does that interfere with pushing the code change to the upstream, who doesn't care about debian/changelog? Cheers, Moritz >From 2eebc2ad36cb04ca22c277b94b525f24437e44db Mon Sep 17 00:00:00 2001 From: Moritz Muehlenhoff Date: Wed, 18 Jul 2007 20:55:45 +0200 Subject: [PATCH] 8 bit characters on the Linux console lead to input corruption (e.g. German umlauts). Easily reproducable by inserting a login name with umlaut and typing backspace afterwards. agetty supports tty paritys, which leads to getty treating these characters as a 7bit char with set parity. This patch by Samuel Thibault adds a new option -8 which disables parity detection for ttys not used for serial logins. | Note: With this patch, 8bit characters are just silently dropped (that's | the expected getty behavior), this is quite neat since you then don't | even need to backspace your 8bit characters :) --- diff --git a/login-utils/agetty.8 b/login-utils/agetty.8 index b1ade5fe..5bde294b 100644 --- a/login-utils/agetty.8 +++ b/login-utils/agetty.8 @@ -3,7 +3,7 @@ agetty \- alternative Linux getty .SH SYNOPSIS -.BR "agetty " [\-ihLmnw] +.BR "agetty " [\-8ihLmnw] .RI "[-f " issue_file ] .RI "[-l " login_program ] .RI "[-I " init ] @@ -13,7 +13,7 @@ agetty \- alternative Linux getty .I baud_rate,... .RI [ term ] .br -.BR "agetty " [\-ihLmnw] +.BR "agetty " [\-8ihLmnw] .RI "[-f " issue_file ] .RI "[-l " login_program ] .RI "[-I " init ] @@ -92,6 +92,9 @@ whatever init(8) may have set, and is inherited by login and the shell. .fi .ad .TP +\-8 +Assume that the tty is 8-bit clean, hence disable parity detection. +.TP \-h Enable hardware (RTS/CTS) flow control. It is left up to the application to disable software (XON/XOFF) flow protocol where diff --git a/login-utils/agetty.c b/login-utils/agetty.c index 806c3d98..46285b1c 100644 --- a/login-utils/agetty.c +++ b/login-utils/agetty.c @@ -154,6 +154,7 @@ struct options { char *issue; /* alternative issue file */ int numspeed; /* number of baud rates to try */ int speeds[MAX_SPEED]; /* baud rates to be tried */ + int eightbits; /* assume 8bit-clean tty */ }; #define F_PARSE (1<<0) /* process modem status messages */ @@ -411,8 +412,11 @@ parse_args(argc, argv, op) extern int optind; /* getopt */ int c; - while (isascii(c = getopt(argc, argv, "I:LH:f:hil:mt:wn"))) { + while (isascii(c = getopt(argc, argv, "8I:LH:f:hil:mt:wn"))) { switch (c) { + case '8': + op->eightbits = 1; + break; case 'I': if (!(op->initstring = malloc(strlen(optarg)+1))) { error(_("can't malloc initstring")); @@ -1148,10 +1152,11 @@ char *get_logname(op, cp, tp) if ((c == 0) && op->numspeed > 1) return (0); - /* Do parity bit handling. */ - if (c != (ascval = (c & 0177))) { /* "parity" bit on ? */ + if (op->eightbits) { + ascval = c; + } else if (c != (ascval = (c & 0177))) { /* "parity" bit on */ for (bits = 1, mask = 1; mask & 0177; mask <<= 1) if (mask & ascval) bits++; /* count "1" bits */ @@ -1312,7 +1317,7 @@ bcode(s) void usage() { - fprintf(stderr, _("Usage: %s [-hiLmw] [-l login_program] [-t timeout] [-I initstring] [-H login_host] baud_rate,... line [termtype]\nor\t[-hiLmw] [-l login_program] [-t timeout] [-I initstring] [-H login_host] line baud_rate,... [termtype]\n"), progname); + fprintf(stderr, _("Usage: %s [-8hiLmw] [-l login_program] [-t timeout] [-I initstring] [-H login_host] baud_rate,... line [termtype]\nor\t[-hiLmw] [-l login_program] [-t timeout] [-I initstring] [-H login_host] line baud_rate,... [termtype]\n"), progname); exit(1); }