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

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

#if defined(IN_ACCESS) || (defined(HAVE_DECL_IN_ACCESS) && HAVE_DECL_IN_ACCESS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_ACCESS) == (0x00000001), "IN_ACCESS != 0x00000001");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_ACCESS 0x00000001
#endif
#if defined(IN_MODIFY) || (defined(HAVE_DECL_IN_MODIFY) && HAVE_DECL_IN_MODIFY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_MODIFY) == (0x00000002), "IN_MODIFY != 0x00000002");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_MODIFY 0x00000002
#endif
#if defined(IN_ATTRIB) || (defined(HAVE_DECL_IN_ATTRIB) && HAVE_DECL_IN_ATTRIB)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_ATTRIB) == (0x00000004), "IN_ATTRIB != 0x00000004");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_ATTRIB 0x00000004
#endif
#if defined(IN_CLOSE_WRITE) || (defined(HAVE_DECL_IN_CLOSE_WRITE) && HAVE_DECL_IN_CLOSE_WRITE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_CLOSE_WRITE) == (0x00000008), "IN_CLOSE_WRITE != 0x00000008");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_CLOSE_WRITE 0x00000008
#endif
#if defined(IN_CLOSE_NOWRITE) || (defined(HAVE_DECL_IN_CLOSE_NOWRITE) && HAVE_DECL_IN_CLOSE_NOWRITE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_CLOSE_NOWRITE) == (0x00000010), "IN_CLOSE_NOWRITE != 0x00000010");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_CLOSE_NOWRITE 0x00000010
#endif
#if defined(IN_OPEN) || (defined(HAVE_DECL_IN_OPEN) && HAVE_DECL_IN_OPEN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_OPEN) == (0x00000020), "IN_OPEN != 0x00000020");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_OPEN 0x00000020
#endif
#if defined(IN_MOVED_FROM) || (defined(HAVE_DECL_IN_MOVED_FROM) && HAVE_DECL_IN_MOVED_FROM)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_MOVED_FROM) == (0x00000040), "IN_MOVED_FROM != 0x00000040");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_MOVED_FROM 0x00000040
#endif
#if defined(IN_MOVED_TO) || (defined(HAVE_DECL_IN_MOVED_TO) && HAVE_DECL_IN_MOVED_TO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_MOVED_TO) == (0x00000080), "IN_MOVED_TO != 0x00000080");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_MOVED_TO 0x00000080
#endif
#if defined(IN_CREATE) || (defined(HAVE_DECL_IN_CREATE) && HAVE_DECL_IN_CREATE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_CREATE) == (0x00000100), "IN_CREATE != 0x00000100");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_CREATE 0x00000100
#endif
#if defined(IN_DELETE) || (defined(HAVE_DECL_IN_DELETE) && HAVE_DECL_IN_DELETE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_DELETE) == (0x00000200), "IN_DELETE != 0x00000200");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_DELETE 0x00000200
#endif
#if defined(IN_DELETE_SELF) || (defined(HAVE_DECL_IN_DELETE_SELF) && HAVE_DECL_IN_DELETE_SELF)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_DELETE_SELF) == (0x00000400), "IN_DELETE_SELF != 0x00000400");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_DELETE_SELF 0x00000400
#endif
#if defined(IN_MOVE_SELF) || (defined(HAVE_DECL_IN_MOVE_SELF) && HAVE_DECL_IN_MOVE_SELF)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_MOVE_SELF) == (0x00000800), "IN_MOVE_SELF != 0x00000800");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_MOVE_SELF 0x00000800
#endif
#if defined(IN_UNMOUNT) || (defined(HAVE_DECL_IN_UNMOUNT) && HAVE_DECL_IN_UNMOUNT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_UNMOUNT) == (0x00002000), "IN_UNMOUNT != 0x00002000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_UNMOUNT 0x00002000
#endif
#if defined(IN_Q_OVERFLOW) || (defined(HAVE_DECL_IN_Q_OVERFLOW) && HAVE_DECL_IN_Q_OVERFLOW)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_Q_OVERFLOW) == (0x00004000), "IN_Q_OVERFLOW != 0x00004000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_Q_OVERFLOW 0x00004000
#endif
#if defined(IN_IGNORED) || (defined(HAVE_DECL_IN_IGNORED) && HAVE_DECL_IN_IGNORED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_IGNORED) == (0x00008000), "IN_IGNORED != 0x00008000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_IGNORED 0x00008000
#endif
#if defined(IN_ONLYDIR) || (defined(HAVE_DECL_IN_ONLYDIR) && HAVE_DECL_IN_ONLYDIR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_ONLYDIR) == (0x01000000), "IN_ONLYDIR != 0x01000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_ONLYDIR 0x01000000
#endif
#if defined(IN_DONT_FOLLOW) || (defined(HAVE_DECL_IN_DONT_FOLLOW) && HAVE_DECL_IN_DONT_FOLLOW)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_DONT_FOLLOW) == (0x02000000), "IN_DONT_FOLLOW != 0x02000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_DONT_FOLLOW 0x02000000
#endif
#if defined(IN_EXCL_UNLINK) || (defined(HAVE_DECL_IN_EXCL_UNLINK) && HAVE_DECL_IN_EXCL_UNLINK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_EXCL_UNLINK) == (0x04000000), "IN_EXCL_UNLINK != 0x04000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_EXCL_UNLINK 0x04000000
#endif
#if defined(IN_MASK_ADD) || (defined(HAVE_DECL_IN_MASK_ADD) && HAVE_DECL_IN_MASK_ADD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_MASK_ADD) == (0x20000000), "IN_MASK_ADD != 0x20000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_MASK_ADD 0x20000000
#endif
#if defined(IN_ISDIR) || (defined(HAVE_DECL_IN_ISDIR) && HAVE_DECL_IN_ISDIR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_ISDIR) == (0x40000000), "IN_ISDIR != 0x40000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_ISDIR 0x40000000
#endif
#if defined(IN_ONESHOT) || (defined(HAVE_DECL_IN_ONESHOT) && HAVE_DECL_IN_ONESHOT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_ONESHOT) == (0x80000000), "IN_ONESHOT != 0x80000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_ONESHOT 0x80000000
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat inotify_flags in mpers mode

# else

static
const struct xlat inotify_flags[] = {
 XLAT(IN_ACCESS),
 XLAT(IN_MODIFY),
 XLAT(IN_ATTRIB),
 XLAT(IN_CLOSE_WRITE),
 XLAT(IN_CLOSE_NOWRITE),
 XLAT(IN_OPEN),
 XLAT(IN_MOVED_FROM),
 XLAT(IN_MOVED_TO),
 XLAT(IN_CREATE),
 XLAT(IN_DELETE),
 XLAT(IN_DELETE_SELF),
 XLAT(IN_MOVE_SELF),
 XLAT(IN_UNMOUNT),
 XLAT(IN_Q_OVERFLOW),
 XLAT(IN_IGNORED),
 XLAT(IN_ONLYDIR),
 XLAT(IN_DONT_FOLLOW),
 XLAT(IN_EXCL_UNLINK),
 XLAT(IN_MASK_ADD),
 XLAT(IN_ISDIR),
 XLAT(IN_ONESHOT),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
