We've moved the open with CLOEXEC idiom into a helper function, so call it instead of duplicating the code. This also replaces a couple of opens that didn't properly do CLOEXEC. Signed-off-by: Derek Foreman <derekf@osg.samsung.com> Reviewed-by: Kristian Høgsberg <krh@bitplanet.net> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>tags/11.0-branchpoint
| @@ -611,9 +611,9 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp) | |||
| char buf[64]; | |||
| int n = snprintf(buf, sizeof(buf), DRM_DEV_NAME, DRM_DIR_NAME, 0); | |||
| if (n != -1 && n < sizeof(buf)) | |||
| fd = open(buf, O_RDWR); | |||
| fd = loader_open_device(buf); | |||
| if (fd < 0) | |||
| fd = open("/dev/dri/card0", O_RDWR); | |||
| fd = loader_open_device("/dev/dri/card0"); | |||
| dri2_dpy->own_device = 1; | |||
| gbm = gbm_create_device(fd); | |||
| if (gbm == NULL) | |||
| @@ -97,16 +97,7 @@ dri2_initialize_surfaceless(_EGLDriver *drv, _EGLDisplay *disp) | |||
| if (asprintf(&card_path, DRM_RENDER_DEV_NAME, DRM_DIR_NAME, base + i) < 0) | |||
| continue; | |||
| #ifdef O_CLOEXEC | |||
| dri2_dpy->fd = open(card_path, O_RDWR | O_CLOEXEC); | |||
| if (dri2_dpy->fd < 0 && errno == EINVAL) | |||
| #endif | |||
| { | |||
| dri2_dpy->fd = open(card_path, O_RDWR); | |||
| if (dri2_dpy->fd >= 0) | |||
| fcntl(dri2_dpy->fd, F_SETFD, fcntl(dri2_dpy->fd, F_GETFD) | | |||
| FD_CLOEXEC); | |||
| } | |||
| dri2_dpy->fd = loader_open_device(card_path); | |||
| free(card_path); | |||
| if (dri2_dpy->fd < 0) | |||
| @@ -891,16 +891,7 @@ drm_handle_device(void *data, struct wl_drm *drm, const char *device) | |||
| if (!dri2_dpy->device_name) | |||
| return; | |||
| #ifdef O_CLOEXEC | |||
| dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR | O_CLOEXEC); | |||
| if (dri2_dpy->fd == -1 && errno == EINVAL) | |||
| #endif | |||
| { | |||
| dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR); | |||
| if (dri2_dpy->fd != -1) | |||
| fcntl(dri2_dpy->fd, F_SETFD, fcntl(dri2_dpy->fd, F_GETFD) | | |||
| FD_CLOEXEC); | |||
| } | |||
| dri2_dpy->fd = loader_open_device(dri2_dpy->device_name); | |||
| if (dri2_dpy->fd == -1) { | |||
| _eglLog(_EGL_WARNING, "wayland-egl: could not open %s (%s)", | |||
| dri2_dpy->device_name, strerror(errno)); | |||
| @@ -43,6 +43,7 @@ | |||
| #include "egl_dri2.h" | |||
| #include "egl_dri2_fallbacks.h" | |||
| #include "loader.h" | |||
| static EGLBoolean | |||
| dri2_x11_swap_interval(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, | |||
| @@ -1230,16 +1231,7 @@ dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp) | |||
| if (!dri2_load_driver(disp)) | |||
| goto cleanup_conn; | |||
| #ifdef O_CLOEXEC | |||
| dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR | O_CLOEXEC); | |||
| if (dri2_dpy->fd == -1 && errno == EINVAL) | |||
| #endif | |||
| { | |||
| dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR); | |||
| if (dri2_dpy->fd != -1) | |||
| fcntl(dri2_dpy->fd, F_SETFD, fcntl(dri2_dpy->fd, F_GETFD) | | |||
| FD_CLOEXEC); | |||
| } | |||
| dri2_dpy->fd = loader_open_device(dri2_dpy->device_name); | |||
| if (dri2_dpy->fd == -1) { | |||
| _eglLog(_EGL_WARNING, | |||
| "DRI2: could not open %s (%s)", dri2_dpy->device_name, | |||