From f5664477cbc7c5f94bf6e640adf01e47880a9b12 Mon Sep 17 00:00:00 2001 From: Werner Fink Date: Tue, 8 Jan 2013 15:38:40 +0100 Subject: include/ttyutils: add default chardata this one moves the init_chardata to include/ttyutils.h as well as to lib/include/ttyutils.c. Also the macros CTL/CTRL are fixed in agetty.c and sulogin.c to use the XOR variant CTL. [kzak@redhat.com: use macro rather than global variable for default chardata] Signed-off-by: Werner Fink Signed-off-by: Karel Zak --- include/ttyutils.h | 24 ++++++++++++++++++++++++ login-utils/sulogin-consoles.c | 8 +------- login-utils/sulogin-consoles.h | 2 +- login-utils/sulogin.c | 4 ---- term-utils/agetty.c | 27 ++------------------------- 5 files changed, 28 insertions(+), 37 deletions(-) diff --git a/include/ttyutils.h b/include/ttyutils.h index 3ed788359..021156d3e 100644 --- a/include/ttyutils.h +++ b/include/ttyutils.h @@ -14,6 +14,22 @@ #include #endif +/* Some shorthands for control characters. */ +#define CTL(x) ((x) ^ 0100) /* Assumes ASCII dialect */ +#define CR CTL('M') /* carriage return */ +#define NL CTL('J') /* line feed */ +#define BS CTL('H') /* back space */ +#define DEL CTL('?') /* delete */ + +/* Defaults for line-editing etc. characters; you may want to change these. */ +#define DEF_ERASE DEL /* default erase character */ +#define DEF_INTR CTL('C') /* default interrupt character */ +#define DEF_QUIT CTL('\\') /* default quit char */ +#define DEF_KILL CTL('U') /* default kill char */ +#define DEF_EOF CTL('D') /* default EOF char */ +#define DEF_EOL 0 +#define DEF_SWITCH 0 /* default switch char */ + /* Storage for things detected while the login name was read. */ struct chardata { int erase; /* erase character */ @@ -23,6 +39,14 @@ struct chardata { int capslock; /* upper case without lower case */ }; +#define INIT_CHARDATA(ptr) do { \ + (ptr)->erase = DEF_ERASE; \ + (ptr)->kill = DEF_KILL; \ + (ptr)->eol = CTRL('r'); \ + (ptr)->parity = 0; \ + (ptr)->capslock = 0; \ + } while (0) + extern int get_terminal_width(void); extern int get_terminal_name(const char **path, const char **name, const char **number); diff --git a/login-utils/sulogin-consoles.c b/login-utils/sulogin-consoles.c index e1d36711c..b519f7f25 100644 --- a/login-utils/sulogin-consoles.c +++ b/login-utils/sulogin-consoles.c @@ -281,12 +281,6 @@ __attribute__((__nonnull__,__hot__)) #endif int append_console(struct list_head *consoles, const char *name) { - static const struct chardata initcp = { - .erase = CERASE, - .kill = CKILL, - .eol = CTRL('r'), - .parity = 0 - }; struct console *restrict tail; struct console *last = NULL; @@ -300,6 +294,7 @@ int append_console(struct list_head *consoles, const char *name) return -ENOMEM; INIT_LIST_HEAD(&tail->entry); + INIT_CHARDATA(&tail->cp); list_add_tail(&tail->entry, consoles); tail->tty = ((char *) tail) + alignof(struct console); @@ -311,7 +306,6 @@ int append_console(struct list_head *consoles, const char *name) tail->id = last ? last->id + 1 : 0; tail->pid = 0; memset(&tail->tio, 0, sizeof(tail->tio)); - memcpy(&tail->cp, &initcp, sizeof(struct chardata)); return 0; } diff --git a/login-utils/sulogin-consoles.h b/login-utils/sulogin-consoles.h index c2f95eac7..f762e873a 100644 --- a/login-utils/sulogin-consoles.h +++ b/login-utils/sulogin-consoles.h @@ -28,8 +28,8 @@ #include #include #include -#include +#include "list.h" #include "ttyutils.h" struct console { diff --git a/login-utils/sulogin.c b/login-utils/sulogin.c index 02fa8db57..cf429fe5c 100644 --- a/login-utils/sulogin.c +++ b/login-utils/sulogin.c @@ -58,10 +58,6 @@ #include "sulogin-consoles.h" #define CONMAX 16 -#define BS CTRL('h') -#define NL CTRL('j') -#define CR CTRL('m') - static unsigned int timeout; static int profile; static volatile uint32_t openfd; /* Remember higher file descriptors */ diff --git a/term-utils/agetty.c b/term-utils/agetty.c index c9163caa6..ed97bc560 100644 --- a/term-utils/agetty.c +++ b/term-utils/agetty.c @@ -106,22 +106,6 @@ #define LOGIN "login: " #define LOGIN_ARGV_MAX 16 /* Numbers of args for login */ -/* Some shorthands for control characters. */ -#define CTL(x) (x ^ 0100) /* Assumes ASCII dialect */ -#define CR CTL('M') /* carriage return */ -#define NL CTL('J') /* line feed */ -#define BS CTL('H') /* back space */ -#define DEL CTL('?') /* delete */ - -/* Defaults for line-editing etc. characters; you may want to change these. */ -#define DEF_ERASE DEL /* default erase character */ -#define DEF_INTR CTL('C') /* default interrupt character */ -#define DEF_QUIT CTL('\\') /* default quit char */ -#define DEF_KILL CTL('U') /* default kill char */ -#define DEF_EOF CTL('D') /* default EOF char */ -#define DEF_EOL 0 -#define DEF_SWITCH 0 /* default switch char */ - /* * When multiple baud rates are specified on the command line, the first one * we will try is the first one specified. @@ -178,13 +162,6 @@ struct options { #define serial_tty_option(opt, flag) \ (((opt)->flags & (F_VCONSOLE|(flag))) == (flag)) -/* Initial values for the above. */ -static const struct chardata init_chardata = { - .erase = DEF_ERASE, /* default erase character */ - .kill = DEF_KILL, /* default kill character */ - .eol = 13 /* default eol char */ -}; - struct Speedtab { long speed; speed_t code; @@ -365,7 +342,7 @@ int main(int argc, char **argv) } } - chardata = init_chardata; + INIT_CHARDATA(&chardata); if (options.autolog) { debug("doing auto login\n"); @@ -1404,7 +1381,7 @@ static char *get_logname(struct options *op, struct termios *tp, struct chardata }; /* Initialize kill, erase, parity etc. (also after switching speeds). */ - *cp = init_chardata; + INIT_CHARDATA(cp); /* * Flush pending input (especially important after parsing or switching -- cgit v1.2.3-55-g7522