/* Generated by ./xlat/gen.sh from ./xlat/timerfdflags.in; do not edit. */

#include "gcc_compat.h"
#include "static_assert.h"

#if defined(TFD_TIMER_ABSTIME) || (defined(HAVE_DECL_TFD_TIMER_ABSTIME) && HAVE_DECL_TFD_TIMER_ABSTIME)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TFD_TIMER_ABSTIME) == ((1 << 0)), "TFD_TIMER_ABSTIME != (1 << 0)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TFD_TIMER_ABSTIME (1 << 0)
#endif
#if defined(TFD_TIMER_CANCEL_ON_SET) || (defined(HAVE_DECL_TFD_TIMER_CANCEL_ON_SET) && HAVE_DECL_TFD_TIMER_CANCEL_ON_SET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TFD_TIMER_CANCEL_ON_SET) == ((1 << 1)), "TFD_TIMER_CANCEL_ON_SET != (1 << 1)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TFD_TIMER_CANCEL_ON_SET (1 << 1)
#endif
#if defined TFD_CLOEXEC || defined O_CLOEXEC
#if defined(TFD_CLOEXEC) || (defined(HAVE_DECL_TFD_CLOEXEC) && HAVE_DECL_TFD_CLOEXEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TFD_CLOEXEC) == (O_CLOEXEC), "TFD_CLOEXEC != O_CLOEXEC");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TFD_CLOEXEC O_CLOEXEC
#endif
#endif
#if defined(TFD_NONBLOCK) || (defined(HAVE_DECL_TFD_NONBLOCK) && HAVE_DECL_TFD_NONBLOCK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TFD_NONBLOCK) == (O_NONBLOCK), "TFD_NONBLOCK != O_NONBLOCK");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TFD_NONBLOCK O_NONBLOCK
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat timerfdflags in mpers mode

# else

static
const struct xlat timerfdflags[] = {


 XLAT(TFD_TIMER_ABSTIME),
 XLAT(TFD_TIMER_CANCEL_ON_SET),
#if defined TFD_CLOEXEC || defined O_CLOEXEC
 XLAT(TFD_CLOEXEC),
#endif
 XLAT(TFD_NONBLOCK),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
