diff --git a/configure.ac b/configure.ac index 6dcb82a732..b2069b48f5 100644 --- a/configure.ac +++ b/configure.ac @@ -478,6 +478,13 @@ unistd.h \ have_inotify="${ac_cv_header_sys_inotify_h}" AM_CONDITIONAL([HAVE_INOTIFY], [test "x${have_inotify}" = "xyes"]) +have_notify_win32="${have_win32}" +AC_DEFINE_IF([HAVE_NOTIFY_WIN32], + [test "x${have_notify_win32}" = "xyes"], + [File monitoring with Windows notification]) +AM_CONDITIONAL([HAVE_NOTIFY_WIN32], [test "x${have_notify_win32}" = "xyes"]) + + EFL_CHECK_PATH_MAX @@ -2392,17 +2399,6 @@ if test "x${want_poll}" = "xyes" ; then have_poll="yes" fi -have_notify_win32="no" - -case "$host_os" in - mingw32ce*) - ;; - mingw32*) - have_notify_win32="yes" - AC_DEFINE([HAVE_NOTIFY_WIN32], [1], [File monitoring with Windows notification]) - ;; -esac - if ! test "x${have_atfile_source}" = "xno" ; then AC_CHECK_FUNCS([mkdirat], [ @@ -3933,11 +3929,6 @@ setxattr("/", "user.ethumb.md5", NULL, 0, 0); AC_MSG_RESULT([${have_xattr}]) -# Check for inotify specificity -have_notify_win32="no" -EIO_CHECK_NOTIFY_WIN32([have_notify_win32="yes"], [have_notify_win32="no"]) -AM_CONDITIONAL([EIO_HAVE_WINCHANGE], [test "x${have_notify_win32}" = "xyes"]) - #### End of Eio diff --git a/src/Makefile_Ecore_File.am b/src/Makefile_Ecore_File.am index 2172245342..4f0f150ba1 100644 --- a/src/Makefile_Ecore_File.am +++ b/src/Makefile_Ecore_File.am @@ -11,12 +11,22 @@ lib_ecore_file_libecore_file_la_SOURCES = \ lib/ecore_file/ecore_file.c \ lib/ecore_file/ecore_file_download.c \ lib/ecore_file/ecore_file_monitor.c \ -lib/ecore_file/ecore_file_monitor_inotify.c \ -lib/ecore_file/ecore_file_monitor_poll.c \ -lib/ecore_file/ecore_file_monitor_win32.c \ lib/ecore_file/ecore_file_path.c \ lib/ecore_file/ecore_file_private.h +if HAVE_INOTIFY +lib_ecore_file_libecore_file_la_SOURCES += \ +lib/ecore_file/ecore_file_monitor_inotify.c +else +if HAVE_NOTIFY_WIN32 +lib_ecore_file_libecore_file_la_SOURCES += \ +lib/ecore_file/ecore_file_monitor_win32.c +else +lib_ecore_file_libecore_file_la_SOURCES += \ +lib/ecore_file/ecore_file_monitor_poll.c +endif +endif + lib_ecore_file_libecore_file_la_CPPFLAGS = \ -I$(top_srcdir)/src/lib/eina \ -I$(top_srcdir)/src/lib/eo \ diff --git a/src/Makefile_Eio.am b/src/Makefile_Eio.am index 9624285e13..626756fa68 100644 --- a/src/Makefile_Eio.am +++ b/src/Makefile_Eio.am @@ -21,7 +21,7 @@ lib/eio/eio_private.h if HAVE_INOTIFY lib_eio_libeio_la_SOURCES += lib/eio/eio_monitor_inotify.c else -if EIO_HAVE_WINCHANGE +if HAVE_NOTIFY_WIN32 lib_eio_libeio_la_SOURCES += lib/eio/eio_monitor_win32.c endif endif diff --git a/src/lib/ecore_file/ecore_file_monitor.c b/src/lib/ecore_file/ecore_file_monitor.c index ac7d6d4dc3..6b6fb32349 100644 --- a/src/lib/ecore_file/ecore_file_monitor.c +++ b/src/lib/ecore_file/ecore_file_monitor.c @@ -4,66 +4,18 @@ #include "ecore_file_private.h" -typedef enum { - ECORE_FILE_MONITOR_TYPE_NONE, -#ifdef HAVE_SYS_INOTIFY_H - ECORE_FILE_MONITOR_TYPE_INOTIFY, -#endif -#ifdef HAVE_NOTIFY_WIN32 - ECORE_FILE_MONITOR_TYPE_NOTIFY_WIN32, -#endif -#ifdef HAVE_POLL - ECORE_FILE_MONITOR_TYPE_POLL -#endif -} Ecore_File_Monitor_Type; - -static Ecore_File_Monitor_Type monitor_type = ECORE_FILE_MONITOR_TYPE_NONE; - int ecore_file_monitor_init(void) { -#ifdef HAVE_SYS_INOTIFY_H - monitor_type = ECORE_FILE_MONITOR_TYPE_INOTIFY; - if (ecore_file_monitor_inotify_init()) + if (ecore_file_monitor_backend_init()) return 1; -#endif -#ifdef HAVE_NOTIFY_WIN32 - monitor_type = ECORE_FILE_MONITOR_TYPE_NOTIFY_WIN32; - if (ecore_file_monitor_win32_init()) - return 1; -#endif -#ifdef HAVE_POLL - monitor_type = ECORE_FILE_MONITOR_TYPE_POLL; - if (ecore_file_monitor_poll_init()) - return 1; -#endif - monitor_type = ECORE_FILE_MONITOR_TYPE_NONE; return 0; } void ecore_file_monitor_shutdown(void) { - switch (monitor_type) - { - case ECORE_FILE_MONITOR_TYPE_NONE: - break; -#ifdef HAVE_SYS_INOTIFY_H - case ECORE_FILE_MONITOR_TYPE_INOTIFY: - ecore_file_monitor_inotify_shutdown(); - break; -#endif -#ifdef HAVE_NOTIFY_WIN32 - case ECORE_FILE_MONITOR_TYPE_NOTIFY_WIN32: - ecore_file_monitor_win32_shutdown(); - break; -#endif -#ifdef HAVE_POLL - case ECORE_FILE_MONITOR_TYPE_POLL: - ecore_file_monitor_poll_shutdown(); - break; -#endif - } + ecore_file_monitor_backend_shutdown(); } /** @@ -94,27 +46,11 @@ ecore_file_monitor_add(const char *path, Ecore_File_Monitor_Cb func, void *data) { - if (!path || !*path) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL(path[0] == '\0', NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL); - switch (monitor_type) - { - case ECORE_FILE_MONITOR_TYPE_NONE: - return NULL; -#ifdef HAVE_SYS_INOTIFY_H - case ECORE_FILE_MONITOR_TYPE_INOTIFY: - return ecore_file_monitor_inotify_add(path, func, data); -#endif -#ifdef HAVE_NOTIFY_WIN32 - case ECORE_FILE_MONITOR_TYPE_NOTIFY_WIN32: - return ecore_file_monitor_win32_add(path, func, data); -#endif -#ifdef HAVE_POLL - case ECORE_FILE_MONITOR_TYPE_POLL: - return ecore_file_monitor_poll_add(path, func, data); -#endif - } - return NULL; + return ecore_file_monitor_backend_add(path, func, data); } /** @@ -131,29 +67,8 @@ ecore_file_monitor_add(const char *path, EAPI void ecore_file_monitor_del(Ecore_File_Monitor *em) { - if (!em) - return; - - switch (monitor_type) - { - case ECORE_FILE_MONITOR_TYPE_NONE: - break; -#ifdef HAVE_SYS_INOTIFY_H - case ECORE_FILE_MONITOR_TYPE_INOTIFY: - ecore_file_monitor_inotify_del(em); - break; -#endif -#ifdef HAVE_NOTIFY_WIN32 - case ECORE_FILE_MONITOR_TYPE_NOTIFY_WIN32: - ecore_file_monitor_win32_del(em); - break; -#endif -#ifdef HAVE_POLL - case ECORE_FILE_MONITOR_TYPE_POLL: - ecore_file_monitor_poll_del(em); - break; -#endif - } + EINA_SAFETY_ON_NULL_RETURN(em); + ecore_file_monitor_backend_del(em); } /** @@ -170,8 +85,7 @@ ecore_file_monitor_del(Ecore_File_Monitor *em) EAPI const char * ecore_file_monitor_path_get(Ecore_File_Monitor *em) { - if (!em) - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(em, NULL); return em->path; } diff --git a/src/lib/ecore_file/ecore_file_monitor_inotify.c b/src/lib/ecore_file/ecore_file_monitor_inotify.c index 9cb5de83e6..9f9818dcd7 100644 --- a/src/lib/ecore_file/ecore_file_monitor_inotify.c +++ b/src/lib/ecore_file/ecore_file_monitor_inotify.c @@ -20,8 +20,6 @@ * - Listen to IN_IGNORED, emitted when the watch is removed */ -#ifdef HAVE_SYS_INOTIFY_H - #include @@ -48,7 +46,7 @@ static void _ecore_file_monitor_inotify_print(char *file, int mas #endif int -ecore_file_monitor_inotify_init(void) +ecore_file_monitor_backend_init(void) { int fd; @@ -69,12 +67,12 @@ ecore_file_monitor_inotify_init(void) } int -ecore_file_monitor_inotify_shutdown(void) +ecore_file_monitor_backend_shutdown(void) { int fd; while(_monitors) - ecore_file_monitor_inotify_del(_monitors); + ecore_file_monitor_backend_del(_monitors); if (_fdh) { @@ -87,7 +85,7 @@ ecore_file_monitor_inotify_shutdown(void) } Ecore_File_Monitor * -ecore_file_monitor_inotify_add(const char *path, +ecore_file_monitor_backend_add(const char *path, void (*func) (void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path), @@ -100,8 +98,8 @@ ecore_file_monitor_inotify_add(const char *path, if (_inotify_fd_pid != getpid()) { - ecore_file_monitor_inotify_shutdown(); - ecore_file_monitor_inotify_init(); + ecore_file_monitor_backend_shutdown(); + ecore_file_monitor_backend_init(); } em = calloc(1, sizeof(Ecore_File_Monitor_Inotify)); @@ -124,7 +122,7 @@ ecore_file_monitor_inotify_add(const char *path, } void -ecore_file_monitor_inotify_del(Ecore_File_Monitor *em) +ecore_file_monitor_backend_del(Ecore_File_Monitor *em) { int fd; @@ -283,7 +281,7 @@ _ecore_file_monitor_inotify_monitor(Ecore_File_Monitor *em, const char *path) if (ECORE_FILE_MONITOR_INOTIFY(em)->wd < 0) { INF("inotify_add_watch failed, file was deleted"); - ecore_file_monitor_inotify_del(em); + ecore_file_monitor_backend_del(em); return 0; } return 1; @@ -328,4 +326,3 @@ _ecore_file_monitor_inotify_print(char *file, int mask) INF("Inotify unmount %s: %s", type, file); } #endif -#endif /* HAVE_SYS_INOTIFY_H */ diff --git a/src/lib/ecore_file/ecore_file_monitor_poll.c b/src/lib/ecore_file/ecore_file_monitor_poll.c index 68889a74e8..03ac117087 100644 --- a/src/lib/ecore_file/ecore_file_monitor_poll.c +++ b/src/lib/ecore_file/ecore_file_monitor_poll.c @@ -8,8 +8,6 @@ #include "ecore_file_private.h" -#ifdef HAVE_POLL - /* * TODO: * - Implement recursive as an option! @@ -43,16 +41,16 @@ static void _ecore_file_monitor_poll_check(Ecore_File_Monitor *em); static int _ecore_file_monitor_poll_checking(Ecore_File_Monitor *em, char *name); int -ecore_file_monitor_poll_init(void) +ecore_file_monitor_backend_init(void) { return 1; } int -ecore_file_monitor_poll_shutdown(void) +ecore_file_monitor_backend_shutdown(void) { while(_monitors) - ecore_file_monitor_poll_del(_monitors); + ecore_file_monitor_backend_del(_monitors); if (_timer) { @@ -63,7 +61,7 @@ ecore_file_monitor_poll_shutdown(void) } Ecore_File_Monitor * -ecore_file_monitor_poll_add(const char *path, +ecore_file_monitor_backend_add(const char *path, void (*func) (void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path), @@ -125,7 +123,7 @@ ecore_file_monitor_poll_add(const char *path, } else { - ecore_file_monitor_poll_del(em); + ecore_file_monitor_backend_del(em); return NULL; } @@ -133,7 +131,7 @@ ecore_file_monitor_poll_add(const char *path, } void -ecore_file_monitor_poll_del(Ecore_File_Monitor *em) +ecore_file_monitor_backend_del(Ecore_File_Monitor *em) { Ecore_File *l; @@ -337,4 +335,3 @@ _ecore_file_monitor_poll_checking(Ecore_File_Monitor *em, char *name) } return 0; } -#endif diff --git a/src/lib/ecore_file/ecore_file_monitor_win32.c b/src/lib/ecore_file/ecore_file_monitor_win32.c index 7f3af0907b..84ac083cfd 100644 --- a/src/lib/ecore_file/ecore_file_monitor_win32.c +++ b/src/lib/ecore_file/ecore_file_monitor_win32.c @@ -6,8 +6,6 @@ # include #endif -#ifdef HAVE_NOTIFY_WIN32 - # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN @@ -225,19 +223,19 @@ _ecore_file_monitor_win32_cb(void *data, Ecore_Win32_Handler *wh) } int -ecore_file_monitor_win32_init(void) +ecore_file_monitor_backend_init(void) { return 1; } int -ecore_file_monitor_win32_shutdown(void) +ecore_file_monitor_backend_shutdown(void) { return 1; } Ecore_File_Monitor * -ecore_file_monitor_win32_add(const char *path, +ecore_file_monitor_backend_add(const char *path, void (*func) (void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path), @@ -293,7 +291,7 @@ ecore_file_monitor_win32_add(const char *path, } void -ecore_file_monitor_win32_del(Ecore_File_Monitor *em) +ecore_file_monitor_backend_del(Ecore_File_Monitor *em) { Ecore_File_Monitor_Win32 *m; @@ -306,5 +304,3 @@ ecore_file_monitor_win32_del(Ecore_File_Monitor *em) free(em->path); free(em); } - -#endif diff --git a/src/lib/ecore_file/ecore_file_private.h b/src/lib/ecore_file/ecore_file_private.h index 769f2ba014..5a091b3b04 100644 --- a/src/lib/ecore_file/ecore_file_private.h +++ b/src/lib/ecore_file/ecore_file_private.h @@ -81,42 +81,15 @@ struct _Ecore_File_Monitor Ecore_File *files; }; -#ifdef HAVE_SYS_INOTIFY_H -int ecore_file_monitor_inotify_init(void); -int ecore_file_monitor_inotify_shutdown(void); -Ecore_File_Monitor *ecore_file_monitor_inotify_add(const char *path, - void (*func) (void *data, - Ecore_File_Monitor *ecore_file_monitor, - Ecore_File_Event event, - const char *path), - void *data); -void ecore_file_monitor_inotify_del(Ecore_File_Monitor *ecore_file_monitor); -#endif - -#ifdef HAVE_NOTIFY_WIN32 -int ecore_file_monitor_win32_init(void); -int ecore_file_monitor_win32_shutdown(void); -Ecore_File_Monitor *ecore_file_monitor_win32_add(const char *path, - void (*func) (void *data, - Ecore_File_Monitor *ecore_file_monitor, - Ecore_File_Event event, - const char *path), - void *data); -void ecore_file_monitor_win32_del(Ecore_File_Monitor *ecore_file_monitor); -#endif - -#ifdef HAVE_POLL -int ecore_file_monitor_poll_init(void); -int ecore_file_monitor_poll_shutdown(void); -Ecore_File_Monitor *ecore_file_monitor_poll_add(const char *path, - void (*func) (void *data, - Ecore_File_Monitor *ecore_file_monitor, - Ecore_File_Event event, - const char *path), - void *data); -void ecore_file_monitor_poll_del(Ecore_File_Monitor *ecore_file_monitor); - -#endif +int ecore_file_monitor_backend_init(void); +int ecore_file_monitor_backend_shutdown(void); +Ecore_File_Monitor *ecore_file_monitor_backend_add(const char *path, + void (*func) (void *data, + Ecore_File_Monitor *ecore_file_monitor, + Ecore_File_Event event, + const char *path), + void *data); +void ecore_file_monitor_backend_del(Ecore_File_Monitor *ecore_file_monitor); /* ecore_file_path */ void ecore_file_path_init(void);