diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c index 8a88598980447631845885e80319c4cccfcdcef9..46baeb6f32070019a6f9371289888289134ba190 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -541,11 +541,17 @@ static int end_syscall(struct state *state, struct syscall_spec *syscall, } } else if (mode == CHECK_EXACT) { if (actual != expected) { - asprintf(error, - "Expected result %d but got %d " - "with errno %d (%s)", - expected, - actual, actual_errno, strerror(actual_errno)); + if (actual < 0) + asprintf(error, + "Expected result %d but got %d " + "with errno %d (%s)", + expected, + actual, + actual_errno, strerror(actual_errno)); + else + asprintf(error, + "Expected result %d but got %d", + expected, actual); return STATUS_ERR; } } else { @@ -556,13 +562,19 @@ static int end_syscall(struct state *state, struct syscall_spec *syscall, if (syscall->error != NULL) { s64 expected_errno = 0; if (symbol_to_int(syscall->error->errno_macro, - &expected_errno, error)) + &expected_errno, error)) return STATUS_ERR; if (actual_errno != expected_errno) { + char *exp_error, *act_error; + + asprintf(&exp_error, "%s", strerror(expected_errno)); + asprintf(&act_error, "%s", strerror(actual_errno)); asprintf(error, "Expected errno %d (%s) but got %d (%s)", - (int)expected_errno, strerror(expected_errno), - actual_errno, strerror(actual_errno)); + (int)expected_errno, exp_error, + actual_errno, act_error); + free(exp_error); + free(act_error); return STATUS_ERR; } }