forked from enlightenment/efl
ecore: force initialization of Efl.Io.Closer.Fd.
This will prevent closing magically fd 0 when the object is not initialized yet.
This commit is contained in:
parent
6232fa2a9b
commit
17507bab43
|
@ -13,28 +13,43 @@
|
|||
typedef struct _Efl_Io_Closer_Fd_Data
|
||||
{
|
||||
int fd;
|
||||
|
||||
Eina_Bool close_on_exec;
|
||||
Eina_Bool close_on_destructor;
|
||||
Eina_Bool initialized;
|
||||
} Efl_Io_Closer_Fd_Data;
|
||||
|
||||
static void
|
||||
_efl_io_closer_initialize(Efl_Io_Closer_Fd_Data *pd)
|
||||
{
|
||||
if (pd->initialized) return ;
|
||||
pd->fd = -1;
|
||||
pd->initialized = EINA_TRUE;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_io_closer_fd_closer_fd_set(Eo *o EINA_UNUSED, Efl_Io_Closer_Fd_Data *pd, int fd)
|
||||
{
|
||||
_efl_io_closer_initialize(pd);
|
||||
pd->fd = fd;
|
||||
}
|
||||
|
||||
EOLIAN static int
|
||||
_efl_io_closer_fd_closer_fd_get(Eo *o EINA_UNUSED, Efl_Io_Closer_Fd_Data *pd)
|
||||
{
|
||||
_efl_io_closer_initialize(pd);
|
||||
return pd->fd;
|
||||
}
|
||||
|
||||
EOLIAN static Eina_Error
|
||||
_efl_io_closer_fd_efl_io_closer_close(Eo *o, Efl_Io_Closer_Fd_Data *pd EINA_UNUSED)
|
||||
{
|
||||
int fd = efl_io_closer_fd_get(o);
|
||||
int fd;
|
||||
Eina_Error err = 0;
|
||||
|
||||
_efl_io_closer_initialize(pd);
|
||||
fd = efl_io_closer_fd_get(o);
|
||||
|
||||
EINA_SAFETY_ON_TRUE_RETURN_VAL(fd < 0, EBADF);
|
||||
|
||||
efl_io_closer_fd_set(o, -1);
|
||||
|
@ -46,12 +61,15 @@ _efl_io_closer_fd_efl_io_closer_close(Eo *o, Efl_Io_Closer_Fd_Data *pd EINA_UNUS
|
|||
EOLIAN static Eina_Bool
|
||||
_efl_io_closer_fd_efl_io_closer_closed_get(Eo *o, Efl_Io_Closer_Fd_Data *pd EINA_UNUSED)
|
||||
{
|
||||
_efl_io_closer_initialize(pd);
|
||||
return efl_io_closer_fd_get(o) < 0;
|
||||
}
|
||||
|
||||
EOLIAN static Eina_Bool
|
||||
_efl_io_closer_fd_efl_io_closer_close_on_exec_set(Eo *o, Efl_Io_Closer_Fd_Data *pd, Eina_Bool close_on_exec)
|
||||
{
|
||||
_efl_io_closer_initialize(pd);
|
||||
|
||||
#ifdef _WIN32
|
||||
DBG("close on exec is not supported on windows");
|
||||
pd->close_on_exec = close_on_exec;
|
||||
|
@ -83,6 +101,8 @@ _efl_io_closer_fd_efl_io_closer_close_on_exec_set(Eo *o, Efl_Io_Closer_Fd_Data *
|
|||
EOLIAN static Eina_Bool
|
||||
_efl_io_closer_fd_efl_io_closer_close_on_exec_get(Eo *o, Efl_Io_Closer_Fd_Data *pd)
|
||||
{
|
||||
_efl_io_closer_initialize(pd);
|
||||
|
||||
#ifdef _WIN32
|
||||
return pd->close_on_exec;
|
||||
(void)o;
|
||||
|
@ -110,12 +130,14 @@ _efl_io_closer_fd_efl_io_closer_close_on_exec_get(Eo *o, Efl_Io_Closer_Fd_Data *
|
|||
EOLIAN static void
|
||||
_efl_io_closer_fd_efl_io_closer_close_on_destructor_set(Eo *o EINA_UNUSED, Efl_Io_Closer_Fd_Data *pd, Eina_Bool close_on_destructor)
|
||||
{
|
||||
_efl_io_closer_initialize(pd);
|
||||
pd->close_on_destructor = close_on_destructor;
|
||||
}
|
||||
|
||||
EOLIAN static Eina_Bool
|
||||
_efl_io_closer_fd_efl_io_closer_close_on_destructor_get(Eo *o EINA_UNUSED, Efl_Io_Closer_Fd_Data *pd)
|
||||
{
|
||||
_efl_io_closer_initialize(pd);
|
||||
return pd->close_on_destructor;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue