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

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

#if defined(XFS_QUOTA_UDQ_ACCT) || (defined(HAVE_DECL_XFS_QUOTA_UDQ_ACCT) && HAVE_DECL_XFS_QUOTA_UDQ_ACCT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((XFS_QUOTA_UDQ_ACCT) == ((1<<0)), "XFS_QUOTA_UDQ_ACCT != (1<<0)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define XFS_QUOTA_UDQ_ACCT (1<<0)
#endif
#if defined(XFS_QUOTA_UDQ_ENFD) || (defined(HAVE_DECL_XFS_QUOTA_UDQ_ENFD) && HAVE_DECL_XFS_QUOTA_UDQ_ENFD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((XFS_QUOTA_UDQ_ENFD) == ((1<<1)), "XFS_QUOTA_UDQ_ENFD != (1<<1)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define XFS_QUOTA_UDQ_ENFD (1<<1)
#endif
#if defined(XFS_QUOTA_GDQ_ACCT) || (defined(HAVE_DECL_XFS_QUOTA_GDQ_ACCT) && HAVE_DECL_XFS_QUOTA_GDQ_ACCT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((XFS_QUOTA_GDQ_ACCT) == ((1<<2)), "XFS_QUOTA_GDQ_ACCT != (1<<2)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define XFS_QUOTA_GDQ_ACCT (1<<2)
#endif
#if defined(XFS_QUOTA_GDQ_ENFD) || (defined(HAVE_DECL_XFS_QUOTA_GDQ_ENFD) && HAVE_DECL_XFS_QUOTA_GDQ_ENFD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((XFS_QUOTA_GDQ_ENFD) == ((1<<3)), "XFS_QUOTA_GDQ_ENFD != (1<<3)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define XFS_QUOTA_GDQ_ENFD (1<<3)
#endif
#if defined(XFS_QUOTA_PDQ_ACCT) || (defined(HAVE_DECL_XFS_QUOTA_PDQ_ACCT) && HAVE_DECL_XFS_QUOTA_PDQ_ACCT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((XFS_QUOTA_PDQ_ACCT) == ((1<<4)), "XFS_QUOTA_PDQ_ACCT != (1<<4)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define XFS_QUOTA_PDQ_ACCT (1<<4)
#endif
#if defined(XFS_QUOTA_PDQ_ENFD) || (defined(HAVE_DECL_XFS_QUOTA_PDQ_ENFD) && HAVE_DECL_XFS_QUOTA_PDQ_ENFD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((XFS_QUOTA_PDQ_ENFD) == ((1<<5)), "XFS_QUOTA_PDQ_ENFD != (1<<5)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define XFS_QUOTA_PDQ_ENFD (1<<5)
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat xfs_quota_flags in mpers mode

# else

static
const struct xlat xfs_quota_flags[] = {
 XLAT(XFS_QUOTA_UDQ_ACCT),
 XLAT(XFS_QUOTA_UDQ_ENFD),
 XLAT(XFS_QUOTA_GDQ_ACCT),
 XLAT(XFS_QUOTA_GDQ_ENFD),
 XLAT(XFS_QUOTA_PDQ_ACCT),
 XLAT(XFS_QUOTA_PDQ_ENFD),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
