* [LTP] [PATCH 2/2] Reimplement TST_SAFE_TIMERFD_*() using TST_ASSERT_SYSCALL*()
2020-03-05 14:36 [LTP] [PATCH 1/2] Add TST_ASSERT_SYSCALL*() macros Martin Doucha
@ 2020-03-05 14:36 ` Martin Doucha
2020-03-05 14:46 ` [LTP] [PATCH 1/2] Add TST_ASSERT_SYSCALL*() macros Cyril Hrubis
1 sibling, 0 replies; 3+ messages in thread
From: Martin Doucha @ 2020-03-05 14:36 UTC (permalink / raw)
To: ltp
Example usage of the TST_ASSERT_SYSCALL*() macros.
Signed-off-by: Martin Doucha <mdoucha@suse.cz>
---
lib/tst_safe_timerfd.c | 35 ++++++-----------------------------
1 file changed, 6 insertions(+), 29 deletions(-)
diff --git a/lib/tst_safe_timerfd.c b/lib/tst_safe_timerfd.c
index ffe7b2ef7..18da82184 100644
--- a/lib/tst_safe_timerfd.c
+++ b/lib/tst_safe_timerfd.c
@@ -9,34 +9,18 @@
#define TST_NO_DEFAULT_MAIN
#include "tst_test.h"
-#define TTYPE (errno == ENOTSUP ? TCONF : TBROK)
-
int safe_timerfd_create(const char *file, const int lineno,
int clockid, int flags)
{
- int fd;
-
- fd = timerfd_create(clockid, flags);
- if (fd < 0) {
- tst_brk(TTYPE | TERRNO, "%s:%d timerfd_create(%s) failed",
- file, lineno, tst_clock_name(clockid));
- }
-
- return fd;
+ return TST_ASSERT_SYSCALL_FD_IMPL(timerfd_create(clockid, flags), file,
+ lineno);
}
int safe_timerfd_gettime(const char *file, const int lineno,
int fd, struct itimerspec *curr_value)
{
- int rval;
-
- rval = timerfd_gettime(fd, curr_value);
- if (rval != 0) {
- tst_brk(TTYPE | TERRNO, "%s:%d timerfd_gettime() failed",
- file, lineno);
- }
-
- return rval;
+ return TST_ASSERT_SYSCALL_IMPL(timerfd_gettime(fd, curr_value), file,
+ lineno);
}
int safe_timerfd_settime(const char *file, const int lineno,
@@ -44,13 +28,6 @@ int safe_timerfd_settime(const char *file, const int lineno,
const struct itimerspec *new_value,
struct itimerspec *old_value)
{
- int rval;
-
- rval = timerfd_settime(fd, flags, new_value, old_value);
- if (rval != 0) {
- tst_brk(TTYPE | TERRNO, "%s:%d timerfd_settime() failed",
- file, lineno);
- }
-
- return rval;
+ return TST_ASSERT_SYSCALL_IMPL(timerfd_settime(fd, flags, new_value,
+ old_value), file, lineno);
}
--
2.25.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* [LTP] [PATCH 1/2] Add TST_ASSERT_SYSCALL*() macros
2020-03-05 14:36 [LTP] [PATCH 1/2] Add TST_ASSERT_SYSCALL*() macros Martin Doucha
2020-03-05 14:36 ` [LTP] [PATCH 2/2] Reimplement TST_SAFE_TIMERFD_*() using TST_ASSERT_SYSCALL*() Martin Doucha
@ 2020-03-05 14:46 ` Cyril Hrubis
1 sibling, 0 replies; 3+ messages in thread
From: Cyril Hrubis @ 2020-03-05 14:46 UTC (permalink / raw)
To: ltp
Hi!
> +/* assert that syscall returned only 0 and nothing else */
> +#define TST_ASSERT_SYSCALL(SCALL) \
> + TST_ASSERT_SYSCALL_IMPL(SCALL, __FILE__, __LINE__)
> +
> +#define TST_ASSERT_SYSCALL_IMPL(SCALL, FILENAME, LINENO) \
> + ({ \
> + int _tst_ret; \
> + errno = 0; \
> + _tst_ret = SCALL; \
> + if (_tst_ret == -1) { \
> + int _tst_ttype = errno == ENOTSUP ? TCONF : TBROK; \
> + tst_brk(_tst_ttype | TERRNO, "%s:%d " # SCALL \
^
I do not think that is reasonable to
simply stringify the syscall, we are
adding pretty printers for the syscall
parameters and this change is backward.
These two patches are actually removing the pretty printer for the clock
id for the timerfd_create(). I do not like that.
> + " failed", FILENAME, LINENO); \
> + } \
> + if (_tst_ret != 0) { \
> + tst_brk(TBROK | TERRNO, "%s:%d " # SCALL \
> + " returned invalid value %d", FILENAME, \
> + LINENO, _tst_ret); \
> + } \
> + _tst_ret; \
> + })
> +
> +/*
> + * assert that syscall returned any non-negative value (e.g. valid file
> + * descriptor)
> + */
> +#define TST_ASSERT_SYSCALL_FD(SCALL) \
> + TST_ASSERT_SYSCALL_FD_IMPL(SCALL, __FILE__, __LINE__)
> +
> +#define TST_ASSERT_SYSCALL_FD_IMPL(SCALL, FILENAME, LINENO) \
> + ({ \
> + int _tst_ret; \
> + errno = 0; \
> + _tst_ret = SCALL; \
> + if (_tst_ret == -1) { \
> + int _tst_ttype = errno == ENOTSUP ? TCONF : TBROK; \
> + tst_brk(_tst_ttype | TERRNO, "%s:%d " # SCALL \
> + " failed", FILENAME, LINENO); \
> + } \
> + if (_tst_ret < 0) { \
> + tst_brk(TBROK | TERRNO, "%s:%d " # SCALL \
> + " returned invalid value %d", FILENAME, \
> + LINENO, _tst_ret); \
> + } \
> + _tst_ret; \
> + })
> +
> /*
> * Functions to convert ERRNO to its name and SIGNAL to its name.
> */
> --
> 2.25.1
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 3+ messages in thread