ecore: use Eina_File for cleaner more portable code.

SVN revision: 65451
This commit is contained in:
Cedric BAIL 2011-11-20 15:14:48 +00:00
parent 2b51e449e7
commit 5c17799c25
2 changed files with 29 additions and 41 deletions

View File

@ -390,9 +390,8 @@ ecore_file_remove(const char *file)
EAPI Eina_Bool EAPI Eina_Bool
ecore_file_recursive_rm(const char *dir) ecore_file_recursive_rm(const char *dir)
{ {
DIR *dirp; Eina_Iterator *it;
struct dirent *dp; char buf[PATH_MAX];
char path[PATH_MAX], buf[PATH_MAX];
struct stat st; struct stat st;
int ret; int ret;
@ -402,22 +401,19 @@ ecore_file_recursive_rm(const char *dir)
ret = stat(dir, &st); ret = stat(dir, &st);
if ((ret == 0) && (S_ISDIR(st.st_mode))) if ((ret == 0) && (S_ISDIR(st.st_mode)))
{ {
Eina_File_Direct_Info *info;
ret = 1; ret = 1;
if (stat(dir, &st) == -1) return EINA_FALSE; if (stat(dir, &st) == -1) return EINA_FALSE; /* WOOT: WHY ARE WE CALLING STAT TWO TIMES ??? */
dirp = opendir(dir);
if (dirp) it = eina_file_direct_ls(dir);
EINA_ITERATOR_FOREACH(it, info)
{ {
while ((dp = readdir(dirp))) if (!ecore_file_recursive_rm(info->path))
{ ret = 0;
if ((strcmp(dp->d_name, ".")) && (strcmp(dp->d_name, "..")))
{
snprintf(path, PATH_MAX, "%s/%s", dir, dp->d_name);
if (!ecore_file_recursive_rm(path))
ret = 0;
}
}
closedir(dirp);
} }
eina_iterator_free(it);
if (!ecore_file_rmdir(dir)) ret = 0; if (!ecore_file_rmdir(dir)) ret = 0;
if (ret) if (ret)
return EINA_TRUE; return EINA_TRUE;
@ -815,23 +811,19 @@ ecore_file_readlink(const char *lnk)
EAPI Eina_List * EAPI Eina_List *
ecore_file_ls(const char *dir) ecore_file_ls(const char *dir)
{ {
char *f; Eina_File_Direct_Info *info;
DIR *dirp; Eina_Iterator *ls;
struct dirent *dp;
Eina_List *list = NULL; Eina_List *list = NULL;
dirp = opendir(dir); ls = eina_file_direct_ls(dir);
if (!dirp) return NULL; EINA_ITERATOR_FOREACH(ls, info)
while ((dp = readdir(dirp)))
{ {
if ((strcmp(dp->d_name, ".")) && (strcmp(dp->d_name, ".."))) char *f;
{
f = strdup(dp->d_name); f = strdup(info->path + info->name_start);
list = eina_list_append(list, f); list = eina_list_append(list, f);
}
} }
closedir(dirp); eina_iterator_free(ls);
list = eina_list_sort(list, eina_list_count(list), EINA_COMPARE_CB(strcoll)); list = eina_list_sort(list, eina_list_count(list), EINA_COMPARE_CB(strcoll));
@ -1089,22 +1081,19 @@ ecore_file_strip_ext(const char *path)
EAPI int EAPI int
ecore_file_dir_is_empty(const char *dir) ecore_file_dir_is_empty(const char *dir)
{ {
DIR *dirp; Eina_File_Direct_Info *info;
struct dirent *dp; Eina_Iterator *it;
dirp = opendir(dir); it = eina_file_direct_ls(dir);
if (!dirp) return -1; if (!it) return -1;
while ((dp = readdir(dirp))) EINA_ITERATOR_FOREACH(it, info)
{ {
if ((strcmp(dp->d_name, ".")) && (strcmp(dp->d_name, ".."))) eina_iterator_free(it);
{ return 0;
closedir(dirp);
return 0;
}
} }
closedir(dirp); eina_iterator_free(it);
return 1; return 1;
} }

View File

@ -19,7 +19,6 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <dirent.h>
#include "Ecore.h" #include "Ecore.h"
#include "ecore_private.h" #include "ecore_private.h"