From: Derek Foreman Date: Thu, 9 Feb 2017 14:58:03 +0000 (-0600) Subject: Revert "vpath usage - simplify to bare minimum to make gustavo happy" X-Git-Tag: upstream/1.20.0~2081 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2800038ee212de4588471bca5d0773599b93d470;p=platform%2Fupstream%2Fefl.git Revert "vpath usage - simplify to bare minimum to make gustavo happy" This reverts commit 2037474dc0fd2b360452f2a15abcbe533b57ca37. This causes the wayland_shm engine to seg fault immediately at startup when attempting to create shm buffers. Please make sure when committing changes to the wayland_shm engine to test on intel, exynos, and at least one platform without dmabuf capabilities - or using the EVAS_WAYLAND_SHM_DISABLE_DMABUF env var to disable dmabuf on intel or exynos. Anyone without the time or hardware to fully test changes to wayland_shm can submit a patch to phabricator and assign it to me so I can fully test it before landing. --- diff --git a/src/lib/efreet/efreet_base.c b/src/lib/efreet/efreet_base.c index d510cde..506d2e8 100644 --- a/src/lib/efreet/efreet_base.c +++ b/src/lib/efreet/efreet_base.c @@ -311,8 +311,9 @@ efreet_dirs_init(void) #endif /* xdg_runtime_dir */ - file_obj = efl_vpath_manager_fetch(EFL_VPATH_MANAGER_CLASS, - "(:run:)/"); + file_obj = efl_vpath_manager_fetch(EFL_VPATH_MANAGER_CLASS, "(:run:)/"); + efl_vpath_file_do(file_obj); + efl_vpath_file_wait(file_obj); xdg_runtime_dir = eina_stringshare_add(efl_vpath_file_result_get(file_obj)); efl_del(file_obj); diff --git a/src/lib/elementary/elm_config.c b/src/lib/elementary/elm_config.c index 48330cd..58dd95e 100644 --- a/src/lib/elementary/elm_config.c +++ b/src/lib/elementary/elm_config.c @@ -615,6 +615,9 @@ _elm_config_user_dir_snprintf(char *dst, va_list ap; Efl_Vpath_File *file_obj; static int use_xdg_config = -1; + const char elmdir[] = "elementary"; + const char elmdotdir[] = ".elementary"; + const char *path = NULL; if (use_xdg_config == -1) { @@ -622,15 +625,26 @@ _elm_config_user_dir_snprintf(char *dst, else use_xdg_config = 0; } if (use_xdg_config) - file_obj = efl_vpath_manager_fetch(EFL_VPATH_MANAGER_CLASS, - "(:config:)/elementary"); + { + file_obj = efl_vpath_manager_fetch(EFL_VPATH_MANAGER_CLASS, "(:config:)/"); + efl_vpath_file_do(file_obj); + efl_vpath_file_wait(file_obj); + path = efl_vpath_file_result_get(file_obj); + user_dir_len = eina_str_join_len + (dst, size, '/', path, strlen(path) - 1, elmdir, sizeof(elmdir) - 1); + efl_del(file_obj); + } else - file_obj = efl_vpath_manager_fetch(EFL_VPATH_MANAGER_CLASS, - "(:home:)/.elementary"); - eina_strlcpy(dst, efl_vpath_file_result_get(file_obj), size); - efl_del(file_obj); + { + file_obj = efl_vpath_manager_fetch(EFL_VPATH_MANAGER_CLASS, "(:home:)/"); + efl_vpath_file_do(file_obj); + efl_vpath_file_wait(file_obj); + path = efl_vpath_file_result_get(file_obj); + user_dir_len = eina_str_join_len + (dst, size, '/', path, strlen(path) - 1, elmdotdir, sizeof(elmdotdir) - 1); + efl_del(file_obj); + } - user_dir_len = strlen(dst); off = user_dir_len + 1; if (off >= size) return off; dst[user_dir_len] = '/'; diff --git a/src/lib/elput/elput_evdev.c b/src/lib/elput/elput_evdev.c index e29600c..8067f24 100644 --- a/src/lib/elput/elput_evdev.c +++ b/src/lib/elput/elput_evdev.c @@ -60,16 +60,21 @@ _keyboard_modifiers_update(Elput_Keyboard *kbd, Elput_Seat *seat) static int _keyboard_fd_get(off_t size) { + const char *path; Eina_Tmpstr *fullname; long flags; int fd = 0; + char tmp[PATH_MAX]; Efl_Vpath_File *file_obj; - file_obj = efl_vpath_manager_fetch(EFL_VPATH_MANAGER_CLASS, - "(:run:)/elput-keymap-XXXXXX"); - fd = eina_file_mkstemp(efl_vpath_file_result_get(file_obj), &fullname); + file_obj = efl_vpath_manager_fetch(EFL_VPATH_MANAGER_CLASS, "(:run:)/"); + efl_vpath_file_do(file_obj); + efl_vpath_file_wait(file_obj); + path = efl_vpath_file_result_get(file_obj); + snprintf(tmp, sizeof(tmp), "%s/elput-keymap-XXXXXX", path); efl_del(file_obj); + fd = eina_file_mkstemp(tmp, &fullname); if (fd < 0) return -1; flags = fcntl(fd, F_GETFD); diff --git a/src/modules/ecore_buffer/shm/ecore_buffer_shm.c b/src/modules/ecore_buffer/shm/ecore_buffer_shm.c index 4a36c72..be270a9 100644 --- a/src/modules/ecore_buffer/shm/ecore_buffer_shm.c +++ b/src/modules/ecore_buffer/shm/ecore_buffer_shm.c @@ -54,6 +54,8 @@ _ecore_buffer_shm_buffer_alloc(Ecore_Buffer_Module_Data bmdata, int width, int h { Ecore_Buffer_Shm_Data* b; char *name; + static const char tmp[] = "ecore-buffer-shared-XXXXXX"; + const char *path; int fd, size, page_size; Efl_Vpath_File *file_obj; @@ -68,11 +70,16 @@ _ecore_buffer_shm_buffer_alloc(Ecore_Buffer_Module_Data bmdata, int width, int h b->size = page_size * (((b->stride * b->h) + (page_size - 1)) / page_size); b->am_owner = EINA_TRUE; - file_obj = efl_vpath_manager_fetch(EFL_VPATH_MANAGER_CLASS, - "(:run:)/ecore-buffer-shared-XXXXXX"); - name = strdup(efl_vpath_file_result_get(file_obj)); - efl_del(file_obj); + file_obj = efl_vpath_manager_fetch(EFL_VPATH_MANAGER_CLASS, "(:run:)/"); + efl_vpath_file_do(file_obj); + efl_vpath_file_wait(file_obj); + path = efl_vpath_file_result_get(file_obj); + size = strlen(path) + sizeof(tmp); + name = malloc(size); if (!name) goto err; + strcpy(name, path); + strcat(name, tmp); + efl_del(file_obj); fd = mkostemp(name, O_CLOEXEC); if (fd < 0) goto err_fd; diff --git a/src/modules/evas/engines/wayland_shm/evas_shm.c b/src/modules/evas/engines/wayland_shm/evas_shm.c index 3b9e7a5..05c7ec3 100644 --- a/src/modules/evas/engines/wayland_shm/evas_shm.c +++ b/src/modules/evas/engines/wayland_shm/evas_shm.c @@ -82,6 +82,8 @@ static struct wl_shm_pool * _shm_pool_make(struct wl_shm *shm, int size, void **data) { struct wl_shm_pool *pool; + static const char tmp[] = "evas-wayland_shm-XXXXXX"; + const char *path; char *name; int fd = 0; Eina_Tmpstr *fullname; @@ -93,11 +95,15 @@ _shm_pool_make(struct wl_shm *shm, int size, void **data) if (!shm) return NULL; /* create tmp file name */ - file_obj = efl_vpath_manager_fetch(EFL_VPATH_MANAGER_CLASS, - "(:run:)/evas-wayland_shm-XXXXXX"); - fd = eina_file_mkstemp(efl_vpath_file_result_get(file_obj), &fullname); - efl_del(file_obj); - + file_obj = efl_vpath_manager_fetch(EFL_VPATH_MANAGER_CLASS, "(:run:)/"); + efl_vpath_file_do(file_obj); + efl_vpath_file_wait(file_obj); + path = efl_vpath_file_result_get(file_obj); + if ((name = malloc(strlen(path) + sizeof(tmp)))) strcpy(name, path); + if (!name) return NULL; + strcat(name, tmp); + + fd = eina_file_mkstemp(name, &fullname); if (fd < 0) /* try to create tmp file */ /* if ((fd = mkstemp(name)) < 0) */