From 8410cdd38ad06d0904ec3ba252336fecc4aff067 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Thu, 20 Nov 2014 10:56:03 +0100 Subject: aggety: always set default serial line speed * makes speeds table usage more robust * don't call next_speed() for empty speeds table to avoid division by zero * default to 9600 when port baud unspecified Addresses: https://github.com/karelzak/util-linux/pull/131 Signed-off-by: Karel Zak --- term-utils/agetty.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/term-utils/agetty.c b/term-utils/agetty.c index 590122899..cda0ab731 100644 --- a/term-utils/agetty.c +++ b/term-utils/agetty.c @@ -386,6 +386,11 @@ int main(int argc, char **argv) sigaction(SIGHUP, &sa_hup, NULL); tcsetpgrp(STDIN_FILENO, getpid()); + + /* Default serial line speed (may be ignored on --{extract,keep}-baud) */ + if ((options.flags & F_VCONSOLE) == 0 && options.numspeed == 0) + options.speeds[options.numspeed++] = bcode("9600"); + /* Initialize the termios settings (raw mode, eight-bit, blocking i/o). */ debug("calling termio_init\n"); termio_init(&options, &termios); @@ -447,7 +452,7 @@ int main(int argc, char **argv) debug("reading login name\n"); while ((username = get_logname(&options, &termios, &chardata)) == NULL) - if ((options.flags & F_VCONSOLE) == 0) + if ((options.flags & F_VCONSOLE) == 0 && options.numspeed) next_speed(&options, &termios); } } @@ -801,8 +806,6 @@ static void parse_args(int argc, char **argv, struct options *op) char *v = argv[optind++]; if (is_speed(v)) parse_speeds(op, v); - else - op->speeds[op->numspeed++] = bcode("9600"); } } @@ -1223,7 +1226,11 @@ static void termio_init(struct options *op, struct termios *tp) return; } - if (op->flags & F_KEEPSPEED) { + /* + * Serial line + */ + + if (op->flags & F_KEEPSPEED || !op->numspeed) { /* Save the original setting. */ ispeed = cfgetispeed(tp); ospeed = cfgetospeed(tp); -- cgit v1.2.3-55-g7522