diff mbox series

[1/1] ioctl02.c: check for struct termio

Message ID 20200128212725.22781-1-petr.vorel@gmail.com
State Changes Requested
Delegated to: Petr Vorel
Headers show
Series [1/1] ioctl02.c: check for struct termio | expand

Commit Message

Petr Vorel Jan. 28, 2020, 9:27 p.m. UTC
Test is meant to use legacy struct termio, so we need to check for it.

Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
---
Tested: https://travis-ci.org/pevik/ltp/builds/643099597

NOTE: also rewriting other tests to new API which will use LTP_CHECK_TERMIO
(ioctl02.c and ptem01.c).

Kind regards,
Petr

 configure.ac                              |  1 +
 m4/ltp-termio.m4                          |  6 ++++++
 testcases/kernel/syscalls/ioctl/ioctl01.c | 20 ++++++++++++--------
 3 files changed, 19 insertions(+), 8 deletions(-)
 create mode 100644 m4/ltp-termio.m4

Comments

Petr Vorel Jan. 28, 2020, 9:39 p.m. UTC | #1
Hi,

> Test is meant to use legacy struct termio, so we need to check for it.
Hm, am I wrong, and we should rewrite ioctl01.c and ioctl02.c to use struct
termios? Or do we want to test with both new struct termios and legacy termio?

Kind regards,
Petr
Cyril Hrubis Jan. 29, 2020, 10:01 a.m. UTC | #2
Hi!
> Hm, am I wrong, and we should rewrite ioctl01.c and ioctl02.c to use struct
> termios? Or do we want to test with both new struct termios and legacy termio?

Just have a look at 'man ioctl_list' there are two sets of ioctls one
for termio and one for termios and as usuall we should ideally test both.
Cyril Hrubis Jan. 29, 2020, 10:06 a.m. UTC | #3
Hi!
>  configure.ac                              |  1 +
>  m4/ltp-termio.m4                          |  6 ++++++
>  testcases/kernel/syscalls/ioctl/ioctl01.c | 20 ++++++++++++--------
>  3 files changed, 19 insertions(+), 8 deletions(-)
>  create mode 100644 m4/ltp-termio.m4
> 
> diff --git a/configure.ac b/configure.ac
> index c7cdff1c4..b860bdacc 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -257,6 +257,7 @@ LTP_CHECK_SYSCALL_QUOTACTL
>  LTP_CHECK_SYSCALL_SIGNALFD
>  LTP_CHECK_SYSCALL_UTIMENSAT
>  LTP_CHECK_TASKSTATS
> +LTP_CHECK_TERMIO
>  LTP_CHECK_TIMERFD
>  test "x$with_tirpc" = xyes && LTP_CHECK_TIRPC
>  LTP_CHECK_TPACKET_V3
> diff --git a/m4/ltp-termio.m4 b/m4/ltp-termio.m4
> new file mode 100644
> index 000000000..e745df1d9
> --- /dev/null
> +++ b/m4/ltp-termio.m4
> @@ -0,0 +1,6 @@
> +dnl SPDX-License-Identifier: GPL-2.0-or-later
> +dnl Copyright (c) 2020 Petr Vorel <petr.vorel@gmail.com>
> +
> +AC_DEFUN([LTP_CHECK_TERMIO],[
> +AC_CHECK_TYPES([struct termio],,,[#include <sys/ioctl.h>])
> +])

What about we add a fallback defition of the structure into
lapi/termio.h instead of disabling the test?

That way we would be able to test the kernel even if the userspace
headers were missing...

#include "config.h"

#ifndef HAVE_STRUCT_TERMIO
struct termio {
...
}
#ifdef

Should be enough to be able to compile that test, right?
Petr Vorel Jan. 29, 2020, 10:27 a.m. UTC | #4
Hi,

> > Hm, am I wrong, and we should rewrite ioctl01.c and ioctl02.c to use struct
> > termios? Or do we want to test with both new struct termios and legacy termio?

> Just have a look at 'man ioctl_list' there are two sets of ioctls one
> for termio and one for termios and as usuall we should ideally test both.
Thanks for info. I had a look at man ioctl_tty, just wasn't sure whether it's
worth to test the legacy one.

Added as easyhack issue (I'll wait a bit before implementing it)
https://github.com/linux-test-project/ltp/issues/637

Kind regards,
Petr
diff mbox series

Patch

diff --git a/configure.ac b/configure.ac
index c7cdff1c4..b860bdacc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -257,6 +257,7 @@  LTP_CHECK_SYSCALL_QUOTACTL
 LTP_CHECK_SYSCALL_SIGNALFD
 LTP_CHECK_SYSCALL_UTIMENSAT
 LTP_CHECK_TASKSTATS
+LTP_CHECK_TERMIO
 LTP_CHECK_TIMERFD
 test "x$with_tirpc" = xyes && LTP_CHECK_TIRPC
 LTP_CHECK_TPACKET_V3
diff --git a/m4/ltp-termio.m4 b/m4/ltp-termio.m4
new file mode 100644
index 000000000..e745df1d9
--- /dev/null
+++ b/m4/ltp-termio.m4
@@ -0,0 +1,6 @@ 
+dnl SPDX-License-Identifier: GPL-2.0-or-later
+dnl Copyright (c) 2020 Petr Vorel <petr.vorel@gmail.com>
+
+AC_DEFUN([LTP_CHECK_TERMIO],[
+AC_CHECK_TYPES([struct termio],,,[#include <sys/ioctl.h>])
+])
diff --git a/testcases/kernel/syscalls/ioctl/ioctl01.c b/testcases/kernel/syscalls/ioctl/ioctl01.c
index 7fb8d417e..88c0b9ffb 100644
--- a/testcases/kernel/syscalls/ioctl/ioctl01.c
+++ b/testcases/kernel/syscalls/ioctl/ioctl01.c
@@ -1,11 +1,10 @@ 
 // SPDX-License-Identifier: GPL-2.0-or-later
 /*
- * Copyright (c) International Business Machines  Corp., 2001
- *  07/2001 Ported by Wayne Boyer
- *  04/2002 Fixes by wjhuie
- */
-/*
- * DESCRIPTION
+ * Copyright (c) International Business Machines Corp., 2001
+ * Copyright (c) 2020 Petr Vorel <petr.vorel@gmail.com>
+ * 07/2001 Ported by Wayne Boyer
+ * 04/2002 Fixes by wjhuie
+ *
  *	Testcase to check the errnos set by the ioctl(2) system call.
  *
  * ALGORITHM
@@ -14,13 +13,13 @@ 
  *	3. EINVAL: Pass invalid cmd in ioctl(fd, cmd, arg)
  *	4. ENOTTY: Pass an non-streams fd in ioctl(fd, cmd, arg)
  *	5. EFAULT: Pass a NULL address for termio
- *
  */
 
+#include "config.h"
 #include <errno.h>
 #include <fcntl.h>
 #include <stdio.h>
-#include <termio.h>
+#include <sys/ioctl.h>
 #include <termios.h>
 #include "tst_test.h"
 
@@ -29,6 +28,7 @@ 
 static int fd, fd_file;
 static int bfd = -1;
 
+#ifdef HAVE_STRUCT_TERMIO
 static struct termio termio;
 
 static struct tcase {
@@ -113,3 +113,7 @@  static struct tst_test test = {
 		{}
 	}
 };
+
+#else
+	TST_TEST_TCONF("libc doesn't provide legacy struct termio");
+#endif /* HAVE_STRUCT_TERMIO */