]> git.ozlabs.org Git - ccan/blobdiff - ccan/failtest/failtest.c
failtest: don't insert spurious failures if open would fail anyway.
[ccan] / 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;