xref: /openbsd-src/regress/lib/libc/stdio_threading/fopen/fopen_test.c (revision 83087275e8888ed7109e36d91357557af9d26270)
1*83087275Skrw /*	$OpenBSD: fopen_test.c,v 1.2 2015/01/20 04:41:01 krw Exp $	*/
25054e3e7Sguenther /*
35054e3e7Sguenther  * Copyright (c) 2008 Bret S. Lambert <blambert@openbsd.org>
45054e3e7Sguenther  *
55054e3e7Sguenther  * Permission to use, copy, modify, and distribute this software for any
65054e3e7Sguenther  * purpose with or without fee is hereby granted, provided that the above
75054e3e7Sguenther  * copyright notice and this permission notice appear in all copies.
85054e3e7Sguenther  *
95054e3e7Sguenther  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
105054e3e7Sguenther  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
115054e3e7Sguenther  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
125054e3e7Sguenther  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
135054e3e7Sguenther  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
145054e3e7Sguenther  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
155054e3e7Sguenther  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
165054e3e7Sguenther  */
175054e3e7Sguenther 
185054e3e7Sguenther #include <stdio.h>
195054e3e7Sguenther #include <pthread.h>
205054e3e7Sguenther #include "local.h"
215054e3e7Sguenther 
225054e3e7Sguenther int
writefn(void * cookie,const char * buf,int size)235054e3e7Sguenther writefn(void *cookie, const char *buf, int size)
245054e3e7Sguenther {
255054e3e7Sguenther 	return 0;
265054e3e7Sguenther }
275054e3e7Sguenther 
285054e3e7Sguenther void
fopen_thread(void * v)295054e3e7Sguenther fopen_thread(void *v)
305054e3e7Sguenther {
315054e3e7Sguenther 	FILE *file;
325054e3e7Sguenther 	int i;
335054e3e7Sguenther 
345054e3e7Sguenther 	for (i = 0; i < 4096; i++) {
355054e3e7Sguenther 		file = fwopen(&i, writefn);
365054e3e7Sguenther 		if (file != NULL) {
375054e3e7Sguenther 			fputc('0', file);
385054e3e7Sguenther 			pthread_yield();
395054e3e7Sguenther 			fclose(file);
405054e3e7Sguenther 		}
415054e3e7Sguenther 	}
425054e3e7Sguenther }
435054e3e7Sguenther 
445054e3e7Sguenther int
main(void)455054e3e7Sguenther main(void)
465054e3e7Sguenther {
475054e3e7Sguenther 	run_threads(fopen_thread, NULL);
485054e3e7Sguenther 	exit(0);
495054e3e7Sguenther }
50