Added ECORE_FD_ERROR to go w/ ECORE_FD_READ AND _WRITE. I couldn't trigger the error 'event' though, which makes me wonder whether i missed something
SVN revision: 9096
This commit is contained in:
parent
9220c243f0
commit
d245bdc21c
|
@ -23,7 +23,8 @@ extern "C" {
|
||||||
enum _Ecore_Fd_Handler_Flags
|
enum _Ecore_Fd_Handler_Flags
|
||||||
{
|
{
|
||||||
ECORE_FD_READ = 1, /**< Fd Read mask */
|
ECORE_FD_READ = 1, /**< Fd Read mask */
|
||||||
ECORE_FD_WRITE = 2 /**< Fd Write mask */
|
ECORE_FD_WRITE = 2, /**< Fd Write mask */
|
||||||
|
ECORE_FD_ERROR = 4 /**< Fd Error mask */
|
||||||
};
|
};
|
||||||
typedef enum _Ecore_Fd_Handler_Flags Ecore_Fd_Handler_Flags;
|
typedef enum _Ecore_Fd_Handler_Flags Ecore_Fd_Handler_Flags;
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,7 @@ ecore_main_fd_handler_add(int fd, Ecore_Fd_Handler_Flags flags, int (*func) (voi
|
||||||
fdh->flags = flags;
|
fdh->flags = flags;
|
||||||
fdh->read_active = 0;
|
fdh->read_active = 0;
|
||||||
fdh->write_active = 0;
|
fdh->write_active = 0;
|
||||||
|
fdh->error_active = 0;
|
||||||
fdh->delete_me = 0;
|
fdh->delete_me = 0;
|
||||||
fdh->func = func;
|
fdh->func = func;
|
||||||
fdh->data = (void *)data;
|
fdh->data = (void *)data;
|
||||||
|
@ -182,6 +183,7 @@ ecore_main_fd_handler_active_get(Ecore_Fd_Handler *fd_handler, Ecore_Fd_Handler_
|
||||||
ret = 0;
|
ret = 0;
|
||||||
if ((flags & ECORE_FD_READ) && (fd_handler->read_active)) ret = 1;
|
if ((flags & ECORE_FD_READ) && (fd_handler->read_active)) ret = 1;
|
||||||
if ((flags & ECORE_FD_WRITE) && (fd_handler->write_active)) ret = 1;
|
if ((flags & ECORE_FD_WRITE) && (fd_handler->write_active)) ret = 1;
|
||||||
|
if ((flags & ECORE_FD_ERROR) && (fd_handler->error_active)) ret = 1;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,7 +233,7 @@ static int
|
||||||
_ecore_main_select(double timeout)
|
_ecore_main_select(double timeout)
|
||||||
{
|
{
|
||||||
struct timeval tv, *t;
|
struct timeval tv, *t;
|
||||||
fd_set rfds, wfds;
|
fd_set rfds, wfds, exfds;
|
||||||
int max_fd;
|
int max_fd;
|
||||||
int ret;
|
int ret;
|
||||||
Ecore_List *l;
|
Ecore_List *l;
|
||||||
|
@ -256,6 +258,7 @@ _ecore_main_select(double timeout)
|
||||||
max_fd = 0;
|
max_fd = 0;
|
||||||
FD_ZERO(&rfds);
|
FD_ZERO(&rfds);
|
||||||
FD_ZERO(&wfds);
|
FD_ZERO(&wfds);
|
||||||
|
FD_ZERO(&exfds);
|
||||||
for (l = (Ecore_List *)fd_handlers; l; l = l->next)
|
for (l = (Ecore_List *)fd_handlers; l; l = l->next)
|
||||||
{
|
{
|
||||||
Ecore_Fd_Handler *fdh;
|
Ecore_Fd_Handler *fdh;
|
||||||
|
@ -271,9 +274,14 @@ _ecore_main_select(double timeout)
|
||||||
FD_SET(fdh->fd, &wfds);
|
FD_SET(fdh->fd, &wfds);
|
||||||
if (fdh->fd > max_fd) max_fd = fdh->fd;
|
if (fdh->fd > max_fd) max_fd = fdh->fd;
|
||||||
}
|
}
|
||||||
|
if (fdh->flags & ECORE_FD_ERROR)
|
||||||
|
{
|
||||||
|
FD_SET(fdh->fd, &exfds);
|
||||||
|
if (fdh->fd > max_fd) max_fd = fdh->fd;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (_ecore_signal_count_get()) return -1;
|
if (_ecore_signal_count_get()) return -1;
|
||||||
ret = select(max_fd + 1, &rfds, &wfds, NULL, t);
|
ret = select(max_fd + 1, &rfds, &wfds, &exfds, t);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
if (errno == EINTR) return -1;
|
if (errno == EINTR) return -1;
|
||||||
|
@ -291,6 +299,8 @@ _ecore_main_select(double timeout)
|
||||||
fdh->read_active = 1;
|
fdh->read_active = 1;
|
||||||
if (FD_ISSET(fdh->fd, &wfds))
|
if (FD_ISSET(fdh->fd, &wfds))
|
||||||
fdh->write_active = 1;
|
fdh->write_active = 1;
|
||||||
|
if (FD_ISSET(fdh->fd, &exfds))
|
||||||
|
fdh->error_active = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ecore_main_fd_handlers_cleanup();
|
_ecore_main_fd_handlers_cleanup();
|
||||||
|
@ -333,7 +343,7 @@ _ecore_main_fd_handlers_call(void)
|
||||||
fdh = (Ecore_Fd_Handler *)l;
|
fdh = (Ecore_Fd_Handler *)l;
|
||||||
if (!fdh->delete_me)
|
if (!fdh->delete_me)
|
||||||
{
|
{
|
||||||
if ((fdh->read_active) || (fdh->write_active))
|
if ((fdh->read_active) || (fdh->write_active) || (fdh->error_active))
|
||||||
{
|
{
|
||||||
if (!fdh->func(fdh->data, fdh))
|
if (!fdh->func(fdh->data, fdh))
|
||||||
{
|
{
|
||||||
|
@ -342,6 +352,7 @@ _ecore_main_fd_handlers_call(void)
|
||||||
}
|
}
|
||||||
fdh->read_active = 0;
|
fdh->read_active = 0;
|
||||||
fdh->write_active = 0;
|
fdh->write_active = 0;
|
||||||
|
fdh->error_active = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,8 @@ struct _Ecore_List
|
||||||
enum _Ecore_Fd_Handler_Flags
|
enum _Ecore_Fd_Handler_Flags
|
||||||
{
|
{
|
||||||
ECORE_FD_READ = 1,
|
ECORE_FD_READ = 1,
|
||||||
ECORE_FD_WRITE = 2
|
ECORE_FD_WRITE = 2,
|
||||||
|
ECORE_FD_ERROR = 4
|
||||||
};
|
};
|
||||||
typedef enum _Ecore_Fd_Handler_Flags Ecore_Fd_Handler_Flags;
|
typedef enum _Ecore_Fd_Handler_Flags Ecore_Fd_Handler_Flags;
|
||||||
|
|
||||||
|
@ -97,6 +98,7 @@ struct _Ecore_Fd_Handler
|
||||||
Ecore_Fd_Handler_Flags flags;
|
Ecore_Fd_Handler_Flags flags;
|
||||||
int read_active : 1;
|
int read_active : 1;
|
||||||
int write_active : 1;
|
int write_active : 1;
|
||||||
|
int error_active : 1;
|
||||||
int delete_me : 1;
|
int delete_me : 1;
|
||||||
int (*func) (void *data, Ecore_Fd_Handler *fd_handler);
|
int (*func) (void *data, Ecore_Fd_Handler *fd_handler);
|
||||||
void *data;
|
void *data;
|
||||||
|
|
Loading…
Reference in New Issue