Subject: bug#8976: documentation / behavior discrepancy with lt_dlopenext

From: Andy Wingo <[email-masked]>
Date: Fri, 01 Jul 2011 17:03:03 +0200

Hi list,

Re-sending this report, now that you have debbugs.

On Wed 30 Mar 2011 19:19, Andy Wingo <[email-masked]> writes:

> 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
> "/usr/lib64/libSDL-1.2.so.0.11.3".
>
>     $ 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?

The original discussion was here:

  http://thread.gmane.org/gmane.lisp.guile.bugs/5387

Any ideas? :-)

Andy
-- 
http://wingolog.org/