diff options
author | Vincent Torri <vincent.torri@gmail.com> | 2010-11-06 21:00:58 +0000 |
---|---|---|
committer | Vincent Torri <vincent.torri@gmail.com> | 2010-11-06 21:00:58 +0000 |
commit | 43c8fd5d6adc11195c8b2ad5f90bd65afd2c4b16 (patch) | |
tree | 1b2af2426670a62651b1f141dcd880cd6da3ca33 | |
parent | 97b3dfb37b55eef30df7c44d46877a7022b88c10 (diff) | |
download | eina-43c8fd5d6adc11195c8b2ad5f90bd65afd2c4b16.tar.gz |
* port eina_file_*_ls() on Windows and put the code in another file
* on Windows eina_file_stat_ls() is the same that eina_file_direct_ls()
SVN revision: 54250
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | src/lib/Makefile.am | 7 | ||||
-rw-r--r-- | src/lib/eina_file.c | 112 |
3 files changed, 27 insertions, 96 deletions
diff --git a/configure.ac b/configure.ac index d3720b0..c6d479c 100644 --- a/configure.ac +++ b/configure.ac @@ -345,18 +345,22 @@ AC_C_INLINE AC_C___ATTRIBUTE__ AC_PROG_CC_STDC +have_win32="no" EINA_CPPFLAGS="" EINA_CFLAGS="" case "$host_os" in mingw32ce*) EINA_CPPFLAGS="-D_WIN32_WCE=0x0420" EINA_CFLAGS="${EVIL_CFLAGS}" + have_win32="yes" ;; mingw*) EINA_CPPFLAGS="-D_WIN32_WINNT=0x0501" EINA_CFLAGS="${EVIL_CFLAGS}" + have_win32="yes" ;; esac +AM_CONDITIONAL([EINA_HAVE_WIN32], [test "x$have_win32" = "xyes"]) m4_ifdef([v_mic], [ diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index da17e40..dcf0fb1 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -15,7 +15,6 @@ eina_log.c \ eina_hash.c \ eina_lalloc.c \ eina_inlist.c \ -eina_file.c \ eina_mempool.c \ eina_list.c \ eina_matrixsparse.c \ @@ -48,6 +47,12 @@ eina_ustrbuf.c \ eina_unicode.c \ eina_quadtree.c +if EINA_HAVE_WIN32 +base_sources += eina_file_win32.c +else +base_sources += eina_file.c +endif + EXTRA_DIST = \ eina_share_common.h \ eina_private.h \ diff --git a/src/lib/eina_file.c b/src/lib/eina_file.c index 2b4d41e..c62527b 100644 --- a/src/lib/eina_file.c +++ b/src/lib/eina_file.c @@ -1,5 +1,6 @@ /* EINA - EFL data type library * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Vincent Torri + * Copyright (C) 2010 Cedric Bail * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -40,21 +41,11 @@ void *alloca (size_t); #include <string.h> #include <stddef.h> #include <dirent.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> -#ifndef _WIN32 -# include <sys/types.h> -# include <sys/stat.h> -# include <unistd.h> -#else -# include <Evil.h> -#endif /* _WIN2 */ - -#ifndef _WIN32 -# define PATH_DELIM '/' -#else -# define PATH_DELIM '\\' -# define NAME_MAX MAX_PATH -#endif +#define PATH_DELIM '/' #ifdef __sun # ifndef NAME_MAX @@ -325,12 +316,12 @@ _eina_file_stat_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data) */ /*============================================================================* -* Global * -*============================================================================*/ + * Global * + *============================================================================*/ /*============================================================================* -* API * -*============================================================================*/ + * API * + *============================================================================*/ /** * @addtogroup Eina_File_Group File @@ -370,13 +361,12 @@ eina_file_dir_list(const char *dir, Eina_File_Dir_List_Cb cb, void *data) { -#ifndef _WIN32 int dlength; struct dirent *de; DIR *d; -# ifndef _DIRENT_HAVE_D_TYPE +#ifndef _DIRENT_HAVE_D_TYPE struct stat st; -# endif +#endif EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(dir, EINA_FALSE); @@ -402,97 +392,29 @@ eina_file_dir_list(const char *dir, char *path; int length; -# ifdef _DIRENT_HAVE_D_NAMLEN +#ifdef _DIRENT_HAVE_D_NAMLEN length = de->d_namlen; -# else +#else length = strlen(de->d_name); -# endif +#endif path = alloca(dlength + length + 2); strcpy(path, dir); strcat(path, "/"); strcat(path, de->d_name); -# ifdef _DIRENT_HAVE_D_TYPE +#ifdef _DIRENT_HAVE_D_TYPE if (de->d_type != DT_DIR) continue; -# else +#else if (stat(path, &st)) continue; if (!S_ISDIR(st.st_mode)) continue; -# endif +#endif eina_file_dir_list(path, recursive, cb, data); } } closedir(d); -#else - WIN32_FIND_DATA file; - HANDLE hSearch; - char *new_dir; - TCHAR *tdir; - size_t length_dir; - - EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(dir, EINA_FALSE); - EINA_SAFETY_ON_TRUE_RETURN_VAL(dir[0] == '\0', EINA_FALSE); - - length_dir = strlen(dir); - new_dir = (char *)alloca(length_dir + 5); - if (!new_dir) - return EINA_FALSE; - - memcpy(new_dir, dir, length_dir); - memcpy(new_dir + length_dir, "/*.*", 5); - -# ifdef UNICODE - tdir = evil_char_to_wchar(new_dir); -# else - tdir = new_dir; -# endif /* ! UNICODE */ - hSearch = FindFirstFile(tdir, &file); -# ifdef UNICODE - free(tdir); -# endif /* UNICODE */ - - if (hSearch == INVALID_HANDLE_VALUE) - return EINA_FALSE; - - do - { - char *filename; - -# ifdef UNICODE - filename = evil_wchar_to_char(file.cFileName); -# else - filename = file.cFileName; -# endif /* ! UNICODE */ - if (!strcmp(filename, ".") || !strcmp(filename, "..")) - continue; - - cb(filename, dir, data); - - if (recursive == EINA_TRUE) - { - char *path; - - path = alloca(strlen(dir) + strlen(filename) + 2); - strcpy(path, dir); - strcat(path, "/"); - strcat(path, filename); - - if (!(file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) - continue; - - eina_file_dir_list(path, recursive, cb, data); - } - -# ifdef UNICODE - free(filename); -# endif /* UNICODE */ - - } while (FindNextFile(hSearch, &file)); - FindClose(hSearch); -#endif /* _WIN32 */ return EINA_TRUE; } |