egl/android: simplify device open/probe
authorEmil Velikov <emil.velikov@collabora.com>
Wed, 8 Aug 2018 14:40:56 +0000 (15:40 +0100)
committerEmil Velikov <emil.l.velikov@gmail.com>
Fri, 24 Aug 2018 10:52:44 +0000 (11:52 +0100)
Currently droid_probe_device, does not do any 'probing' but filtering
out a device if it doesn't match the vendor string given.

Rename the function, straighten the return type and call it only as
needed - an actual vendor string is provided.

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Tomasz Figa <tfiga@chromium.org>
src/egl/drivers/dri2/platform_android.c

index 24fd77696135dc55c011cf5108755b0aa2c36979..1f9fe27ab85a7541e6c8ae263de3fbdfcd6112f6 100644 (file)
@@ -1404,31 +1404,20 @@ error:
    return false;
 }
 
-typedef enum {
-   probe_fail = -1,
-   probe_success = 0,
-   probe_filtered_out = 1,
-} probe_ret_t;
-
-static probe_ret_t
-droid_probe_device(_EGLDisplay *disp, int fd, const char *vendor)
+static int
+droid_filter_device(_EGLDisplay *disp, int fd, const char *vendor)
 {
-   int ret;
-
    drmVersionPtr ver = drmGetVersion(fd);
    if (!ver)
-      return probe_fail;
+      return -1;
 
-   if (vendor && strcmp(vendor, ver->name) != 0) {
-      ret = probe_filtered_out;
-      goto cleanup;
+   if (strcmp(vendor, ver->name) != 0) {
+      drmFreeVersion(ver);
+      return -1;
    }
 
-   ret = probe_success;
-
-cleanup:
    drmFreeVersion(ver);
-   return ret;
+   return 0;
 }
 
 static int
@@ -1462,25 +1451,20 @@ droid_open_device(_EGLDisplay *disp)
          continue;
       }
 
-      int ret = droid_probe_device(disp, fd, vendor_name);
-      switch (ret) {
-      case probe_success:
-         goto success;
-      case probe_filtered_out:
-         /* Set as fallback */
-         if (fallback_fd == -1)
+      if (vendor_name && droid_filter_device(disp, fd, vendor_name)) {
+         /* Match requested, but not found - set as fallback */
+         if (fallback_fd == -1) {
             fallback_fd = fd;
-         break;
-      case probe_fail:
-         break;
-      }
+         } else {
+            close(fd);
+            fd = -1;
+         }
 
-      if (fallback_fd != fd)
-         close(fd);
-      fd = -1;
+         continue;
+      }
+      /* Found a device */
+      break;
    }
-
-success:
    drmFreeDevices(devices, num_devices);
 
    if (fallback_fd < 0 && fd < 0) {