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 <werner@suse.de>
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Werner Fink 2013-01-08 15:38:40 +01:00 committed by Karel Zak
parent 0f23ee0c85
commit f5664477cb
5 changed files with 28 additions and 37 deletions

View File

@ -14,6 +14,22 @@
#include <sys/ioctl.h>
#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);

View File

@ -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;
}

View File

@ -28,8 +28,8 @@
#include <stdint.h>
#include <stdio.h>
#include <termios.h>
#include <list.h>
#include "list.h"
#include "ttyutils.h"
struct console {

View File

@ -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 */

View File

@ -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