#include "defs.h"
+#ifdef LINUX
+/*
+ * The C library's definition of struct termios might differ from
+ * the kernel one, and we need to use the kernel layout.
+ */
+#include <linux/termios.h>
+#else
+
#ifdef HAVE_TERMIO_H
#include <termio.h>
#endif /* HAVE_TERMIO_H */
#include <termios.h>
+#endif
#ifdef HAVE_SYS_FILIO_H
#include <sys/filio.h>
#endif
-static struct xlat tcxonc_options[] = {
+static const struct xlat tcxonc_options[] = {
{ TCOOFF, "TCOOFF" },
{ TCOON, "TCOON" },
{ TCIOFF, "TCIOFF" },
};
#ifdef TCLFLSH
-static struct xlat tcflsh_options[] = {
+static const struct xlat tcflsh_options[] = {
{ TCIFLUSH, "TCIFLUSH" },
{ TCOFLUSH, "TCOFLUSH" },
{ TCIOFLUSH, "TCIOFLUSH" },
};
#endif
-static struct xlat baud_options[] = {
+static const struct xlat baud_options[] = {
{ B0, "B0" },
{ B50, "B50" },
{ B75, "B75" },
{ 0, NULL },
};
-static struct xlat modem_flags[] = {
+static const struct xlat modem_flags[] = {
#ifdef TIOCM_LE
{ TIOCM_LE, "TIOCM_LE", },
#endif
};
-int
-term_ioctl(tcp, code, arg)
-struct tcb *tcp;
-long code, arg;
+int term_ioctl(struct tcb *tcp, long code, long arg)
{
struct termios tios;
#ifndef FREEBSD
#define TCSETS TIOCSETA
#define TCSETSW TIOCSETAW
#define TCSETSF TIOCSETAF
-#endif
+#endif
struct winsize ws;
#ifdef TIOCGSIZE
struct ttysize ts;
return 0;
if (abbrev(tcp)) {
tprintf(", {");
-#ifndef FREEBSD
+#ifndef FREEBSD
printxval(baud_options, tios.c_cflag & CBAUD, "B???");
#else
printxval(baud_options, tios.c_ispeed, "B???");
printxval(baud_options, tios.c_ospeed, "B???");
tprintf(" (out)");
}
-#endif
+#endif
tprintf(" %sopost %sisig %sicanon %secho ...}",
(tios.c_oflag & OPOST) ? "" : "-",
(tios.c_lflag & ISIG) ? "" : "-",
case TIOCMBIS:
case TIOCMBIC:
case TIOCMSET:
- if (umove(tcp, arg, &arg) < 0)
+ if (umove(tcp, arg, &i) < 0)
return 0;
tprintf(", [");
- if (!printflags(modem_flags, arg))
- tprintf("0");
+ printflags(modem_flags, i, "TIOCM_???");
tprintf("]");
return 1;
#endif /* TIOCMGET */
case TIOCGPTN:
#endif
tprintf(", ");
- printnum(tcp, arg, "%d");
+ printnum_int(tcp, arg, "%d");
return 1;
-#if 0
- /* ioctls with an indirect parameter displayed in hex */
-
- tprintf(", ");
- printnum(tcp, arg, "%#x");
- return 1;
-#endif
-
/* ioctls with an indirect parameter displayed as a char */
#ifdef TIOCSTI
return 0;
}
}
-