static void _cserve2_shm_cleanup() { Eina_Iterator *iter; const Eina_File_Direct_Info *f_info; char pattern[NAME_MAX]; sprintf(pattern, "evas-shm-%05d-", (int) getuid()); iter = eina_file_direct_ls("/dev/shm"); EINA_ITERATOR_FOREACH(iter, f_info) { if (strstr(f_info->path, pattern)) { const char *shmname = strrchr(f_info->path, '/'); if (!shmname) continue; if (shm_unlink(shmname) == -1) ERR("Failed to remove shm entry at %s: %d %s", shmname, errno, strerror(errno)); else DBG("cserve2 cleanup: removed %s", shmname); } else DBG("cserve2 cleanup: ignoring %s", f_info->path); } eina_iterator_free(iter); }
Eina_List * evas_file_path_list(char *path, const char *match, int match_case) { Eina_File_Direct_Info *info; Eina_Iterator *it; Eina_List *files = NULL; int flags; flags = FNM_PATHNAME; #ifdef FNM_CASEFOLD if (!match_case) flags |= FNM_CASEFOLD; #elif defined FNM_IGNORECASE if (!match_case) flags |= FNM_IGNORECASE; #else /*#warning "Your libc does not provide case-insensitive matching!"*/ #endif it = eina_file_direct_ls(path); EINA_ITERATOR_FOREACH(it, info) { if (match) { if (fnmatch(match, info->path + info->name_start, flags) == 0) files = eina_list_append(files, strdup(info->path + info->name_start)); } else files = eina_list_append(files, strdup(info->path + info->name_start)); } if (it) eina_iterator_free(it); return files; }
static int cache_scan(const char *path, const char *base_id, int priority, int recurse, int *changed) { char *file_id = NULL; char id[PATH_MAX]; char buf[PATH_MAX]; Eina_Iterator *it; Eina_File_Direct_Info *info; if (!ecore_file_is_dir(path)) return 1; it = eina_file_direct_ls(path); if (!it) return 1; id[0] = '\0'; EINA_ITERATOR_FOREACH(it, info) { const char *fname; fname = info->path + info->name_start; if (base_id) { if (*base_id) snprintf(id, sizeof(id), "%s-%s", base_id, fname); else strcpy(id, fname); file_id = id; } snprintf(buf, sizeof(buf), "%s/%s", path, fname); if (ecore_file_is_dir(buf)) { if (recurse) cache_scan(buf, file_id, priority, recurse, changed); } else { if (!cache_add(buf, file_id, priority, changed)) { eina_iterator_free(it); return 0; } } } eina_iterator_free(it); return 1; }
Eina_List * evas_module_engine_list(void) { Evas_Module *em; Eina_List *r = NULL, *l, *ll; Eina_Array_Iterator iterator; Eina_Iterator *it, *it2; unsigned int i; const char *s, *s2; char buf[4096]; EINA_LIST_FOREACH(evas_module_paths, l, s) { snprintf(buf, sizeof(buf), "%s/engines", s); it = eina_file_direct_ls(buf); if (it) { Eina_File_Direct_Info *fi; EINA_ITERATOR_FOREACH(it, fi) { const char *fname = fi->path + fi->name_start; snprintf(buf, sizeof(buf), "%s/engines/%s/%s", s, fname, MODULE_ARCH); it2 = eina_file_ls(buf); if (it2) { EINA_LIST_FOREACH(r, ll, s2) { if (!strcmp(fname, s2)) break; } if (!ll) r = eina_list_append(r, eina_stringshare_add(fname)); eina_iterator_free(it2); } } eina_iterator_free(it); } }
/** * @brief Delete the given directory and all its contents. * * @param dir The name of the directory to delete. * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise. * * This function delete @p dir and all its contents. If @p dir is a * link only the link is removed. It returns @c EINA_TRUE on success, * @c EINA_FALSE otherwise. */ EAPI Eina_Bool ecore_file_recursive_rm(const char *dir) { struct stat st; #ifdef _WIN32 char buf[PATH_MAX]; if (readlink(dir, buf, sizeof(buf) - 1) > 0) return ecore_file_unlink(dir); if (stat(dir, &st) == -1) return EINA_FALSE; #else if (lstat(dir, &st) == -1) return EINA_FALSE; #endif if (S_ISDIR(st.st_mode)) { Eina_File_Direct_Info *info; Eina_Iterator *it; int ret; ret = 1; it = eina_file_direct_ls(dir); EINA_ITERATOR_FOREACH(it, info) { if (!ecore_file_recursive_rm(info->path)) ret = 0; } eina_iterator_free(it); if (!ecore_file_rmdir(dir)) ret = 0; if (ret) return EINA_TRUE; else return EINA_FALSE; }
Eina_Iterator *it; const char *f_name; const Eina_File_Direct_Info *f_info; eina_init(); eina_file_dir_list("/home/", EINA_FALSE, _print_cb, NULL); it = eina_file_ls("/home/"); EINA_ITERATOR_FOREACH(it, f_name) { printf("%s\n", f_name); eina_stringshare_del(f_name); } eina_iterator_free(it); it = eina_file_stat_ls("/home/"); EINA_ITERATOR_FOREACH(it, f_info) printf("%s if of type %d\n", f_info->path, f_info->type); eina_iterator_free(it); it = eina_file_direct_ls("/home/"); EINA_ITERATOR_FOREACH(it, f_info) printf("%s if of type %d\n", f_info->path, f_info->type); eina_iterator_free(it); eina_shutdown(); return 0; }
static int _ecore_evas_fb_init(Ecore_Evas *ee, int w, int h) { Eina_File_Direct_Info *info; Eina_Iterator *ls; Ecore_Fb_Input_Device *device; Ecore_Fb_Input_Device_Cap caps; int mouse_handled = 0, always_ts; const char *s; _ecore_evas_init_count++; if (_ecore_evas_init_count > 1) return _ecore_evas_init_count; ecore_event_evas_init(); /* register all input devices */ ls = eina_file_direct_ls("/dev/input/"); EINA_ITERATOR_FOREACH(ls, info) { if (strncmp(info->path + info->name_start, "event", 5) != 0) continue; if (!(device = ecore_fb_input_device_open(info->path))) continue; ecore_fb_input_device_window_set(device, ee); caps = ecore_fb_input_device_cap_get(device); /* Mouse */ #ifdef HAVE_TSLIB if (caps & ECORE_FB_INPUT_DEVICE_CAP_RELATIVE) #else if ((caps & ECORE_FB_INPUT_DEVICE_CAP_RELATIVE) || (caps & ECORE_FB_INPUT_DEVICE_CAP_ABSOLUTE)) #endif { ecore_fb_input_device_axis_size_set(device, w, h); ecore_fb_input_device_listen(device,1); ecore_evas_input_devices = eina_list_append(ecore_evas_input_devices, device); if (!mouse_handled) { ecore_evas_event_handlers[0] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, _ecore_evas_event_mouse_button_down, NULL); ecore_evas_event_handlers[1] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, _ecore_evas_event_mouse_button_up, NULL); ecore_evas_event_handlers[2] = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, _ecore_evas_event_mouse_move, NULL); ecore_evas_event_handlers[3] = ecore_event_handler_add(ECORE_EVENT_MOUSE_WHEEL, _ecore_evas_event_mouse_wheel, NULL); mouse_handled = 1; } } /* Keyboard */ else if ((caps & ECORE_FB_INPUT_DEVICE_CAP_KEYS_OR_BUTTONS) && !(caps & ECORE_FB_INPUT_DEVICE_CAP_ABSOLUTE)) { ecore_fb_input_device_listen(device,1); ecore_evas_input_devices = eina_list_append(ecore_evas_input_devices, device); } } eina_iterator_free(ls); /* force to check for touchscreen via tslib even if mouse was detected */ s = getenv("ECORE_EVAS_FB_TS_ALWAYS"); always_ts = s ? atoi(s) : 0; if ((!mouse_handled) || (always_ts)) { if (ecore_fb_ts_init()) { ecore_fb_ts_event_window_set(ee); ecore_evas_event_handlers[0] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, _ecore_evas_event_mouse_button_down, NULL); ecore_evas_event_handlers[1] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, _ecore_evas_event_mouse_button_up, NULL); ecore_evas_event_handlers[2] = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, _ecore_evas_event_mouse_move, NULL); mouse_handled = 1; } } return _ecore_evas_init_count; }