| lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | #include <dlfcn.h> | 
|  | 2 | #include <stdio.h> | 
|  | 3 |  | 
|  | 4 |  | 
|  | 5 | /* Number of rounds we perform the test.  */ | 
|  | 6 | #define TEST_ROUNDS	10 | 
|  | 7 |  | 
|  | 8 |  | 
|  | 9 | static const char unknown[] = "a-file-with-this-name-does-not-exist"; | 
|  | 10 | static const char exists[] = "failtestmod.so"; | 
|  | 11 |  | 
|  | 12 |  | 
|  | 13 | int | 
|  | 14 | main (void) | 
|  | 15 | { | 
|  | 16 | int i; | 
|  | 17 |  | 
|  | 18 | setvbuf (stdout, NULL, _IONBF, 0); | 
|  | 19 |  | 
|  | 20 | for (i = 0; i < TEST_ROUNDS; ++i) | 
|  | 21 | { | 
|  | 22 | void *dsc; | 
|  | 23 |  | 
|  | 24 | printf ("Round %d: Try loading \"%s\"\n", i, unknown); | 
|  | 25 |  | 
|  | 26 | dsc = dlopen (unknown, RTLD_NOW); | 
|  | 27 | if (dsc != NULL) | 
|  | 28 | { | 
|  | 29 | printf ("We found a file of name \"%s\": this should not happen\n", | 
|  | 30 | unknown); | 
|  | 31 | return 1; | 
|  | 32 | } | 
|  | 33 |  | 
|  | 34 | printf ("Round %d: loading \"%s\" failed\n", i, unknown); | 
|  | 35 |  | 
|  | 36 | /* Don't use `dlerror', just load an existing file.  */ | 
|  | 37 | dsc = dlopen (exists, RTLD_NOW); | 
|  | 38 | if (dsc == NULL) | 
|  | 39 | { | 
|  | 40 | printf ("Could not load \"%s\": %s\n", exists, dlerror ()); | 
|  | 41 | return 1; | 
|  | 42 | } | 
|  | 43 |  | 
|  | 44 | printf ("Round %d: Loaded \"%s\"\n", i, exists); | 
|  | 45 |  | 
|  | 46 | dlclose (dsc); | 
|  | 47 |  | 
|  | 48 | printf ("Round %d: Unloaded \"%s\"\n", i, exists); | 
|  | 49 | } | 
|  | 50 |  | 
|  | 51 | return 0; | 
|  | 52 | } | 
|  | 53 |  | 
|  | 54 |  | 
|  | 55 | extern void foo (void); | 
|  | 56 |  | 
|  | 57 | void | 
|  | 58 | foo (void) | 
|  | 59 | { | 
|  | 60 | } |