dri: Also support the loader with libudev.so.0.
authorEric Anholt <eric@anholt.net>
Thu, 30 Jan 2014 18:30:57 +0000 (10:30 -0800)
committerEric Anholt <eric@anholt.net>
Sat, 1 Feb 2014 18:08:36 +0000 (10:08 -0800)
As far as I know, this should be safe.  If not, we have to decide whether
to have variable lookup of the functions, or just drop support for .so.0
(which is a year and a half old it looks like)

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=74127
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/loader/loader.c

index 626046a232bd1b33355f87b06d8123de29388376..5d2589943088fa1baed88cda97a5114898bd4241 100644 (file)
@@ -102,6 +102,16 @@ udev_dlopen_handle(void)
 {
    if (!udev_handle) {
       udev_handle = dlopen("libudev.so.1", RTLD_LOCAL | RTLD_LAZY);
+
+      if (!udev_handle) {
+         /* libudev.so.1 changed the return types of the two unref functions
+          * from voids to pointers.  We don't use those return values, and the
+          * only ABI I've heard that cares about this kind of change (calling
+          * a function with a void * return that actually only returns void)
+          * might be ia64.
+          */
+         udev_handle = dlopen("libudev.so.0", RTLD_LOCAL | RTLD_LAZY);
+      }
    }
 
    return udev_handle;