[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

documentation / behavior discrepancy with lt_dlopenext

From: Andy Wingo
Subject: documentation / behavior discrepancy with lt_dlopenext
Date: Wed, 30 Mar 2011 19:19:18 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux)

Hello list,

The ltdl docs say:

    — Function: lt_dlhandle lt_dlopenext (const char *filename)

        The same as lt_dlopen, except that it tries to append different file
        name extensions to the file name. If the file with the file name
        FILENAME cannot be found libltdl tries to append the following
        extensions: [...]

However, there are cases in which lt_dlopenext does not look for a bare
filename.  Specifically the code does:

      if (!filename
          || !advise
          || !advise->try_ext
          || has_library_ext (filename))
        try the bare file
      else if (filename && *filename)
        try extensions...

So, we see that if has_library_ext is FALSE, we don't try the bare
file.  But that check fails for full paths, like

    $ strace guile -c '(dynamic-link "/usr/lib64/libSDL-1.2.so.0.11.3")'
    open("/usr/lib64/libSDL-1.2.so.0.11.3.la", O_RDONLY) = -1 ENOENT (No such 
file or directory)
    open("/usr/lib64/libSDL-1.2.so.0.11.3.so", O_RDONLY) = -1 ENOENT (No such 
file or directory)

The documentation and the code do not agree.  I propose that we fix the
code, to add another `stat' (I know) -- of the bare file name, before
trying to add extensions, in the dlopenext case.

What do you think?


reply via email to

[Prev in Thread] Current Thread [Next in Thread]