#include "local.h"
void
fgets_thread(void *v)
{
char buf[sizeof(TEXT_N) + 1];
FILE *file = v;
int i;
for (i = 0; i < 4096; i++) {
if (fgets(buf, sizeof(buf), file) == NULL) {
if (feof(file))
break;
printf("OMG!!!\n");
fflush(stdout);
break;
}
if (strncmp(buf, TEXT, sizeof(TEXT)))
err(1, "Read not atomic!!!");
}
}
int
main(void)
{
char sfn[24];
FILE *sfp;
int fd, i;
strlcpy(sfn, "/tmp/barnacles.XXXXXXXX", sizeof(sfn));
if ((fd = mkstemp(sfn)) == -1 ||
(sfp = fdopen(fd, "w+")) == NULL) {
int saved_errno = errno;
if (fd != -1) {
unlink(sfn);
close(fd);
}
errc(1, saved_errno, "could not open temporary file");
}
for (i = 0; i < 4096 * THREAD_COUNT; i++)
if (fwrite(TEXT_N, sizeof(char), strlen(TEXT_N), sfp) == 0)
err(1, "Could not populate test file");
run_threads(fgets_thread, sfp);
unlink(sfn);
close(fd);
exit(0);
}