Browse Source

failtest: don't insert spurious failures if open would fail anyway.

open fails in fairly normal cases; don't double execution time for this!
Rusty Russell 15 years ago
parent
commit
479813329a
1 changed files with 7 additions and 2 deletions
  1. 7 2
      ccan/failtest/failtest.c

+ 7 - 2
ccan/failtest/failtest.c

@@ -588,12 +588,17 @@ int failtest_open(const char *pathname,
 	/* Avoid memory leak! */
 	if (p == &unrecorded_call)
 		free((char *)call.pathname);
-	if (should_fail(p)) {
+	p->u.open.ret = open(pathname, call.flags, call.mode);
+
+	if (!failpath && p->u.open.ret == -1) {
+		p->fail = false;
+		p->error = errno;
+	} else if (should_fail(p)) {
+		close(p->u.open.ret);
 		p->u.open.ret = -1;
 		/* FIXME: Play with error codes? */
 		p->error = EACCES;
 	} else {
-		p->u.open.ret = open(pathname, call.flags, call.mode);
 		set_cleanup(p, cleanup_open, struct open_call);
 	}
 	errno = p->error;