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