|
|
|
@ -71,6 +71,7 @@ main (void) |
|
|
|
|
|
|
|
printf ("\nThis is what is in memory now:\n"); |
|
|
|
errors += check_loaded_objects (loaded); |
|
|
|
|
|
|
|
printf( "Loading shared object neededobj3.so\n"); |
|
|
|
obj3 = dlopen( "neededobj3.so", RTLD_LAZY); |
|
|
|
if (obj3 == NULL) |
|
|
|
@ -78,41 +79,44 @@ main (void) |
|
|
|
printf ("%s\n", dlerror ()); |
|
|
|
exit (1); |
|
|
|
} |
|
|
|
printf ("And this is what is now in memory\n"); |
|
|
|
loaded[0] = "neededobj1.so"; |
|
|
|
loaded[1] = "neededobj2.so"; |
|
|
|
loaded[2] = "neededobj3.so"; |
|
|
|
errors += check_loaded_objects (loaded); |
|
|
|
|
|
|
|
printf ("Now loading shared object neededobj2.so\n"); |
|
|
|
obj2[0] = dlopen ("neededobj2.so", RTLD_LAZY); |
|
|
|
if (obj2 == NULL) |
|
|
|
if (obj2[0] == NULL) |
|
|
|
{ |
|
|
|
printf ("%s\n", dlerror ()); |
|
|
|
exit (1); |
|
|
|
} |
|
|
|
printf ("After loading neededobj2.so once\n"); |
|
|
|
errors += check_loaded_objects (loaded); |
|
|
|
|
|
|
|
printf ("And loading shared object neededobj2.so again\n"); |
|
|
|
obj2[1] = dlopen ("neededobj2.so", RTLD_LAZY); |
|
|
|
if (obj2 == NULL) |
|
|
|
if (obj2[1] == NULL) |
|
|
|
{ |
|
|
|
printf ("%s\n", dlerror ()); |
|
|
|
exit (1); |
|
|
|
} |
|
|
|
printf ("Again, this is what is in memory\n"); |
|
|
|
errors += check_loaded_objects (loaded); |
|
|
|
|
|
|
|
printf ("Closing neededobj2.so for the first time\n"); |
|
|
|
dlclose (obj2[0]); |
|
|
|
errors += check_loaded_objects (loaded); |
|
|
|
|
|
|
|
printf ("Closing neededobj3.so\n"); |
|
|
|
dlclose (obj3); |
|
|
|
loaded[2] = NULL; |
|
|
|
errors += check_loaded_objects (loaded); |
|
|
|
|
|
|
|
printf ("Closing neededobj2.so for the second time\n"); |
|
|
|
dlclose (obj2[1]); |
|
|
|
loaded[0] = NULL; |
|
|
|
loaded[1] = NULL; |
|
|
|
errors += check_loaded_objects (loaded); |
|
|
|
|
|
|
|
if (errors != 0) |
|
|
|
printf ("%d errors found\n", errors); |
|
|
|
return errors; |
|
|
|
|