#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/time.h>
+#include <signal.h>
#include <assert.h>
#include <ccan/read_write_all/read_write_all.h>
#include <ccan/failtest/failtest_proto.h>
s->len = lseek(fd, 0, SEEK_END);
lseek(fd, 0, SEEK_SET);
s->contents = malloc(s->len);
- read(fd, s->contents, s->len);
+ if (read(fd, s->contents, s->len) != s->len)
+ err(1, "Failed to save %zu bytes", (size_t)s->len);
lseek(fd, s->off, SEEK_SET);
return s;
}
struct saved_file *next = s->next;
lseek(s->fd, 0, SEEK_SET);
- write(s->fd, s->contents, s->len);
- ftruncate(s->fd, s->len);
+ if (write(s->fd, s->contents, s->len) != s->len)
+ err(1, "Failed to restore %zu bytes", (size_t)s->len);
+ if (ftruncate(s->fd, s->len) != 0)
+ err(1, "Failed to trim file to length %zu",
+ (size_t)s->len);
free(s->contents);
lseek(s->fd, s->off, SEEK_SET);
free(s);
signal(SIGUSR1, SIG_IGN);
sprintf(str, "xterm -e gdb /proc/%d/exe %d &",
getpid(), getpid());
- system(str);
- sleep(5);
+ if (system(str) == 0)
+ sleep(5);
}
}
va_start(ap, line);
call.flags = va_arg(ap, int);
if (call.flags & O_CREAT) {
- call.mode = va_arg(ap, mode_t);
+ call.mode = va_arg(ap, int);
va_end(ap);
}
p = add_history(FAILTEST_OPEN, file, line, &call);