call->line = line;
call->cleanup = NULL;
call->backtrace = get_backtrace(&call->backtrace_num);
- memcpy(&call->u, elem, elem_size);
+ if (elem_size != 0)
+ memcpy(&call->u, elem, elem_size);
tlist_add_tail(&history, call, list);
return call;
}
/* But their program shouldn't leak, even on failure. */
if (!forced_cleanup && i->can_leak) {
+ char *p = failpath_string();
printf("Leak at %s:%u: --failpath=%s\n",
- i->file, i->line, failpath_string());
+ i->file, i->line, p);
+ free(p);
status = 1;
}
}
call.closed = false;
if (call.flags & O_CREAT) {
call.mode = va_arg(ap, int);
- va_end(ap);
}
+ va_end(ap);
p = add_history(FAILTEST_OPEN, true, file, line, &call);
/* Avoid memory leak! */
if (p == &unrecorded_call)
int failtest_pipe(int pipefd[2], const char *file, unsigned line)
{
struct failtest_call *p;
- struct pipe_call call;
- p = add_history(FAILTEST_PIPE, true, file, line, &call);
+ p = add_history_(FAILTEST_PIPE, true, file, line, NULL, 0);
if (should_fail(p)) {
p->u.open.ret = -1;
/* FIXME: Play with error codes? */