Back to index

glibc  2.9
bug-atexit2.c
Go to the documentation of this file.
00001 /* Derived from a test case in
00002    http://sourceware.org/bugzilla/show_bug.cgi?id=1158.  */
00003 #include <dlfcn.h>
00004 #include <stdlib.h>
00005 #include <stdio.h>
00006 #include <unistd.h>
00007 
00008 static int next = 3;
00009 
00010 static void
00011 f1 (void)
00012 {
00013   puts ("f1");
00014   if (next-- != 1)
00015     _exit (1);
00016 }
00017 
00018 static void
00019 f2 (void)
00020 {
00021   puts ("f2");
00022   if (next-- != 2)
00023     _exit (1);
00024 }
00025 
00026 static void
00027 f3 (void)
00028 {
00029   puts ("f3");
00030   if (next-- != 3)
00031     _exit (1);
00032 }
00033 
00034 static int
00035 do_test (void)
00036 {
00037   atexit (f1);
00038 
00039   void *dso = dlopen ("$ORIGIN/bug-atexit2-lib.so", RTLD_NOW);
00040   void (*fn) (void) = (void (*) (void)) dlsym (dso, "foo");
00041   fn ();
00042 
00043   atexit (f2);
00044 
00045   dlclose (dso);
00046 
00047   atexit (f3);
00048 
00049   return 0;
00050 }
00051 
00052 #define TEST_FUNCTION do_test ()
00053 #include "../test-skeleton.c"