apr_arch_inherit.h [plain text]
#ifndef INHERIT_H
#define INHERIT_H
#include "apr_inherit.h"
#define APR_INHERIT (1 << 24)
#define APR_IMPLEMENT_INHERIT_SET(name, flag, pool, cleanup) \
apr_status_t apr_##name##_inherit_set(apr_##name##_t *the##name) \
{ \
if (the##name->flag & APR_FOPEN_NOCLEANUP) \
return APR_EINVAL; \
if (!(the##name->flag & APR_INHERIT)) { \
int flags = fcntl(the##name->name##des, F_GETFD); \
if (flags == -1) \
return errno; \
flags &= ~(FD_CLOEXEC); \
if (fcntl(the##name->name##des, F_SETFD, flags) == -1) \
return errno; \
the##name->flag |= APR_INHERIT; \
apr_pool_child_cleanup_set(the##name->pool, \
(void *)the##name, \
cleanup, apr_pool_cleanup_null); \
} \
return APR_SUCCESS; \
}
#define APR_IMPLEMENT_INHERIT_UNSET(name, flag, pool, cleanup) \
apr_status_t apr_##name##_inherit_unset(apr_##name##_t *the##name) \
{ \
if (the##name->flag & APR_FOPEN_NOCLEANUP) \
return APR_EINVAL; \
if (the##name->flag & APR_INHERIT) { \
int flags; \
if ((flags = fcntl(the##name->name##des, F_GETFD)) == -1) \
return errno; \
flags |= FD_CLOEXEC; \
if (fcntl(the##name->name##des, F_SETFD, flags) == -1) \
return errno; \
the##name->flag &= ~APR_INHERIT; \
apr_pool_child_cleanup_set(the##name->pool, \
(void *)the##name, \
cleanup, cleanup); \
} \
return APR_SUCCESS; \
}
#endif