From b5cddb046f1f735cc51f1a8a69f861711fb690e8 Mon Sep 17 00:00:00 2001 From: Aomx <julian.cordes@gmail.com> Date: Fri, 25 Sep 2015 22:38:14 +0200 Subject: [PATCH] refined if statements for desired behaviour at accept syscalls --- gtests/net/packetdrill/run_system_call.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c index 2ec0c768..187842d6 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -514,7 +514,7 @@ static void begin_syscall(struct state *state, struct syscall_spec *syscall) enum result_check_t { CHECK_EXACT, /* check that result matches exactly */ CHECK_NON_NEGATIVE, /* check that result is non-negative */ - CHECK_ANY, /* accept any result */ + CHECK_ACCEPT, /* checks for results after accept-syscall */ }; static int end_syscall(struct state *state, struct syscall_spec *syscall, enum result_check_t mode, int actual, char **error) @@ -558,8 +558,20 @@ static int end_syscall(struct state *state, struct syscall_spec *syscall, expected, actual); return STATUS_ERR; } - } else if (mode == CHECK_ANY) { - return STATUS_OK; + } else if (mode == CHECK_ACCEPT) { + if (expected >= 0 && actual < 0) { + asprintf(error, + "Expected non-negative result but got %d " + "with errno %d (%s)", + actual, actual_errno, strerror(actual_errno)); + return STATUS_ERR; + } + else if (expected < 0 && actual != expected) { + asprintf(error, + "Expected result %d but got %d", + expected, actual); + return STATUS_ERR; + } }else { assert(!"bad mode"); } @@ -997,7 +1009,7 @@ static int syscall_accept(struct state *state, struct syscall_spec *syscall, result = accept(live_fd, (struct sockaddr *)&live_addr, &live_addrlen); - if (end_syscall(state, syscall, CHECK_ANY, result, error)) + if (end_syscall(state, syscall, CHECK_ACCEPT, result, error)) return STATUS_ERR; if (result >= 0) { -- GitLab