xref: /openbsd/regress/libexec/ld.so/lazy/libfoo/foo.c (revision 6822f9c8)
1*6822f9c8Santon /*	$OpenBSD: foo.c,v 1.4 2024/08/23 12:56:26 anton Exp $ */
220dfae25Smatthieu /* Public domain. 2008, Matthieu Herrb */
320dfae25Smatthieu 
420dfae25Smatthieu #include <dlfcn.h>
520dfae25Smatthieu #include <stdio.h>
69ae1fb7fSjsg #include <err.h>
720dfae25Smatthieu 
820dfae25Smatthieu static void *h = NULL;
920dfae25Smatthieu 
1059f68d03Sbluhm extern int bar(void);
1159f68d03Sbluhm 
1220dfae25Smatthieu void
foo_init(void)1320dfae25Smatthieu foo_init(void)
1420dfae25Smatthieu {
1520dfae25Smatthieu 	printf("loading %s\n", BAR);
1620dfae25Smatthieu 	h = dlopen(BAR, RTLD_LAZY|RTLD_GLOBAL);
1720dfae25Smatthieu 	if (h == NULL)
18*6822f9c8Santon 		errx(1, "dlopen %s: %s", BAR, dlerror());
1920dfae25Smatthieu 	printf("loaded: %s\n", BAR);
2020dfae25Smatthieu }
2120dfae25Smatthieu 
2220dfae25Smatthieu int
foo(void)2320dfae25Smatthieu foo(void)
2420dfae25Smatthieu {
2520dfae25Smatthieu 	if (h == NULL)
2620dfae25Smatthieu 		foo_init();
2720dfae25Smatthieu 
2820dfae25Smatthieu 	return bar();
2920dfae25Smatthieu }
30