Back to index

glibc  2.9
Functions
noload.c File Reference
#include <dlfcn.h>
#include <stdio.h>

Go to the source code of this file.

Functions

int main (void)
int foo (int a)

Function Documentation

int foo ( int  a)
int main ( void  )

Definition at line 5 of file noload.c.

{
  int result = 0;

  /* First try to load an object which is a dependency.  This should
     succeed.  */
  if (dlopen ("testobj1.so", RTLD_LAZY | RTLD_NOLOAD) == NULL)
    {
      printf ("cannot open \"testobj1.so\": %s\n", dlerror ());
      result = 1;
    }
  else
    puts ("loading \"testobj1.so\" succeeded, OK");

  /* Now try loading an object which is not already loaded.  */
  if (dlopen ("testobj5.so", RTLD_LAZY | RTLD_NOLOAD) != NULL)
    {
      puts ("succeeded in loading \"testobj5.so\"");
      result = 1;
    }
  else
    {
      /* Load the object and run the same test again.  */
      void *p;

      puts ("\"testobj5.so\" wasn't loaded and RTLD_NOLOAD prevented it, OK");

      p = dlopen ("testobj5.so", RTLD_LAZY);

      if (p == NULL)
       {
         printf ("cannot open \"testobj5.so\" without RTLD_NOLOAD: %s\n",
                dlerror ());
         result = 1;
       }
      else
       {
         puts ("loading \"testobj5.so\" succeeded, OK");

         if (dlopen ("testobj5.so", RTLD_LAZY | RTLD_NOLOAD) == NULL)
           {
             printf ("cannot open \"testobj5.so\": %s\n", dlerror ());
             result = 1;
           }
         else
           puts ("loading \"testobj5.so\" with RTLD_NOLOAD succeeded, OK");

         if (dlclose (p) != 0)
           {
             printf ("cannot close \"testobj5.so\": %s\n", dlerror ());
             result = 1;
           }
         else
           puts ("closing \"testobj5.so\" succeeded, OK");
       }
    }

  return result;
}

Here is the call graph for this function: