/* 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_CREATE) || (defined(HAVE_DECL_IN_MASK_CREATE) && HAVE_DECL_IN_MASK_CREATE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IN_MASK_CREATE) == (0x10000000), "IN_MASK_CREATE != 0x10000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IN_MASK_CREATE 0x10000000
#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_CREATE),
 XLAT(IN_MASK_ADD),
 XLAT(IN_ISDIR),
 XLAT(IN_ONESHOT),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
