build-sys: fixes for non-Linux systems

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Samuel Thibault 2014-06-19 10:35:23 +02:00 committed by Karel Zak
parent 2ad2196349
commit 88e0f3df66
4 changed files with 26 additions and 2 deletions

View File

@ -324,6 +324,7 @@ AC_CHECK_FUNCS([ \
strnlen \
strtoull \
sysconf \
sysinfo \
updwtmp \
usleep \
warn \

View File

@ -14,7 +14,9 @@ int get_boot_time(struct timeval *boot_time)
struct timeval lores_uptime;
#endif
struct timeval now;
#ifdef HAVE_SYSINFO
struct sysinfo info;
#endif
if (gettimeofday(&now, NULL) != 0) {
warn(_("gettimeofday failed"));
@ -27,6 +29,7 @@ int get_boot_time(struct timeval *boot_time)
return 0;
}
#endif
#ifdef HAVE_SYSINFO
/* fallback */
if (sysinfo(&info) != 0)
warn(_("sysinfo failed"));
@ -34,4 +37,7 @@ int get_boot_time(struct timeval *boot_time)
boot_time->tv_sec = now.tv_sec - info.uptime;
boot_time->tv_usec = 0;
return 0;
#else
return -ENOSYS;
#endif
}

View File

@ -81,6 +81,7 @@ static volatile sig_atomic_t sigchild;
# define IUCLC 0
#endif
#ifdef TIOCGLCKTRMIOS
/*
* For the case plymouth is found on this system
*/
@ -111,6 +112,7 @@ static int plymouth_command(const char* arg)
}
return 1;
}
#endif
/*
* Fix the tty modes and set reasonable defaults.
@ -120,7 +122,9 @@ static void tcinit(struct console *con)
int mode = 0, flags = 0;
struct termios *tio = &con->tio;
struct termios lock;
int fd = con->fd, i = (plymouth_command("--ping")) ? 20 : 0;
int fd = con->fd;
#ifdef TIOCGLCKTRMIOS
int i = (plymouth_command("--ping")) ? 20 : 0;
while (i-- > 0) {
/*
@ -138,6 +142,7 @@ static void tcinit(struct console *con)
}
memset(&lock, 0, sizeof(struct termios));
ioctl(fd, TIOCSLCKTRMIOS, &lock);
#endif
errno = 0;

View File

@ -942,6 +942,9 @@ static void open_tty(char *tty, struct termios *tp, struct options *op)
{
const pid_t pid = getpid();
int closed = 0;
#ifndef KDGKBMODE
int serial;
#endif
/* Set up new standard input, unless we are given an already opened port. */
@ -1090,12 +1093,19 @@ static void open_tty(char *tty, struct termios *tp, struct options *op)
* In case of a virtual console the ioctl KDGKBMODE succeeds
* whereas on other lines it will fails.
*/
if (ioctl(STDIN_FILENO, KDGKBMODE, &op->kbmode) == 0) {
#ifdef KDGKBMODE
if (ioctl(STDIN_FILENO, KDGKBMODE, &op->kbmode) == 0)
#else
if (ioctl(STDIN_FILENO, TIOCMGET, &serial) < 0 && (errno == EINVAL))
#endif
{
op->flags |= F_VCONSOLE;
if (!op->term)
op->term = DEFAULT_VCTERM;
} else {
#ifdef K_RAW
op->kbmode = K_RAW;
#endif
if (!op->term)
op->term = DEFAULT_STERM;
}
@ -1109,6 +1119,7 @@ static void termio_init(struct options *op, struct termios *tp)
speed_t ispeed, ospeed;
struct winsize ws;
struct termios lock;
#ifdef TIOCGLCKTRMIOS
int i = (plymouth_command("--ping") == 0) ? 30 : 0;
while (i-- > 0) {
@ -1129,6 +1140,7 @@ static void termio_init(struct options *op, struct termios *tp)
}
memset(&lock, 0, sizeof(struct termios));
ioctl(STDIN_FILENO, TIOCSLCKTRMIOS, &lock);
#endif
if (op->flags & F_VCONSOLE) {
#if defined(IUTF8) && defined(KDGKBMODE)