summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Fink2013-01-08 15:38:40 +0100
committerKarel Zak2013-01-08 15:42:12 +0100
commitf5664477cbc7c5f94bf6e640adf01e47880a9b12 (patch)
tree5d5f90a1be010cb56470da4ad73d33fa49554beb
parentinclude: cleanup copyright headers (diff)
downloadkernel-qcow2-util-linux-f5664477cbc7c5f94bf6e640adf01e47880a9b12.tar.gz
kernel-qcow2-util-linux-f5664477cbc7c5f94bf6e640adf01e47880a9b12.tar.xz
kernel-qcow2-util-linux-f5664477cbc7c5f94bf6e640adf01e47880a9b12.zip
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>
-rw-r--r--include/ttyutils.h24
-rw-r--r--login-utils/sulogin-consoles.c8
-rw-r--r--login-utils/sulogin-consoles.h2
-rw-r--r--login-utils/sulogin.c4
-rw-r--r--term-utils/agetty.c27
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 <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);
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 <stdint.h>
#include <stdio.h>
#include <termios.h>
-#include <list.h>
+#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