summaryrefslogtreecommitdiff
path: root/src/regress/lib/libc/stdio_threading/fgets/fgets_test.c
diff options
context:
space:
mode:
authorguenther <>2009-11-19 08:06:06 +0000
committerguenther <>2009-11-19 08:06:06 +0000
commit3bf8c221bc859ae3254fe6b11fb60750f0bae04e (patch)
treed068826e9af472b7f9584e32bdc17e83472df8f4 /src/regress/lib/libc/stdio_threading/fgets/fgets_test.c
parente9648d2ce662fb0d79072496682efb0718c01e66 (diff)
downloadopenbsd-3bf8c221bc859ae3254fe6b11fb60750f0bae04e.tar.gz
openbsd-3bf8c221bc859ae3254fe6b11fb60750f0bae04e.tar.bz2
openbsd-3bf8c221bc859ae3254fe6b11fb60750f0bae04e.zip
Add regression tests for stdio threading. Originally by blambert with
some further hacking by me
Diffstat (limited to 'src/regress/lib/libc/stdio_threading/fgets/fgets_test.c')
-rwxr-xr-xsrc/regress/lib/libc/stdio_threading/fgets/fgets_test.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/regress/lib/libc/stdio_threading/fgets/fgets_test.c b/src/regress/lib/libc/stdio_threading/fgets/fgets_test.c
new file mode 100755
index 0000000000..685d4c8257
--- /dev/null
+++ b/src/regress/lib/libc/stdio_threading/fgets/fgets_test.c
@@ -0,0 +1,69 @@
1/*
2 * Copyright (c) 2008 Bret S. Lambert <blambert@openbsd.org>
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17#include "local.h"
18
19void
20fgets_thread(void *v)
21{
22 char buf[sizeof(TEXT_N) + 1];
23 FILE *file = v;
24 int i;
25
26 for (i = 0; i < 4096; i++) {
27 if (fgets(buf, sizeof(buf), file) == NULL) {
28
29 if (feof(file))
30 break;
31
32 printf("OMG!!!\n");
33 fflush(stdout);
34 break;
35 }
36 if (strncmp(buf, TEXT, sizeof(TEXT)))
37 err(1, "Read not atomic!!!");
38 }
39}
40
41int
42main(void)
43{
44 char sfn[24];
45 char buf[sizeof(TEXT)];
46 FILE *sfp;
47 int fd, i;
48
49 strlcpy(sfn, "/tmp/barnacles.XXXXXXXX", sizeof(sfn));
50 if ((fd = mkstemp(sfn)) == -1 ||
51 (sfp = fdopen(fd, "w+")) == NULL) {
52 if (fd != -1) {
53 unlink(sfn);
54 close(fd);
55 }
56 err(1, "could not open temporary file");
57 }
58
59 for (i = 0; i < 4096 * THREAD_COUNT; i++)
60 if (fwrite(TEXT_N, sizeof(char), strlen(TEXT_N), sfp) == 0)
61 err(1, "Could not populate test file");
62
63 run_threads(fgets_thread, sfp);
64
65 unlink(sfn);
66 close(fd);
67
68 exit(0);
69}