failtest: don't insert spurious failures if open would fail anyway.
authorRusty Russell <rusty@rustcorp.com.au>
Tue, 15 Feb 2011 12:55:40 +0000 (23:25 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 15 Feb 2011 12:55:40 +0000 (23:25 +1030)
open fails in fairly normal cases; don't double execution time for this!

ccan/failtest/failtest.c

index 9102ba0a88b884591ef766bdfa9582e4de72d424..1874d620286d697c9c063319f8435e52dd5823aa 100644 (file)
@@ -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;