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

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

#if defined(Q_V1_QUOTAON) || (defined(HAVE_DECL_Q_V1_QUOTAON) && HAVE_DECL_Q_V1_QUOTAON)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V1_QUOTAON) == (OLD_CMD(0x1)), "Q_V1_QUOTAON != OLD_CMD(0x1)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V1_QUOTAON OLD_CMD(0x1)
#endif
#if defined(Q_V1_QUOTAOFF) || (defined(HAVE_DECL_Q_V1_QUOTAOFF) && HAVE_DECL_Q_V1_QUOTAOFF)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V1_QUOTAOFF) == (OLD_CMD(0x2)), "Q_V1_QUOTAOFF != OLD_CMD(0x2)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V1_QUOTAOFF OLD_CMD(0x2)
#endif
#if defined(Q_V1_GETQUOTA) || (defined(HAVE_DECL_Q_V1_GETQUOTA) && HAVE_DECL_Q_V1_GETQUOTA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V1_GETQUOTA) == (OLD_CMD(0x3)), "Q_V1_GETQUOTA != OLD_CMD(0x3)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V1_GETQUOTA OLD_CMD(0x3)
#endif
#if defined(Q_V1_SETQUOTA) || (defined(HAVE_DECL_Q_V1_SETQUOTA) && HAVE_DECL_Q_V1_SETQUOTA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V1_SETQUOTA) == (OLD_CMD(0x4)), "Q_V1_SETQUOTA != OLD_CMD(0x4)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V1_SETQUOTA OLD_CMD(0x4)
#endif
#if defined(Q_V1_SETUSE) || (defined(HAVE_DECL_Q_V1_SETUSE) && HAVE_DECL_Q_V1_SETUSE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V1_SETUSE) == (OLD_CMD(0x5)), "Q_V1_SETUSE != OLD_CMD(0x5)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V1_SETUSE OLD_CMD(0x5)
#endif
#if defined(Q_V1_SYNC) || (defined(HAVE_DECL_Q_V1_SYNC) && HAVE_DECL_Q_V1_SYNC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V1_SYNC) == (OLD_CMD(0x6)), "Q_V1_SYNC != OLD_CMD(0x6)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V1_SYNC OLD_CMD(0x6)
#endif
#if defined(Q_SETQLIM) || (defined(HAVE_DECL_Q_SETQLIM) && HAVE_DECL_Q_SETQLIM)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_SETQLIM) == (OLD_CMD(0x7)), "Q_SETQLIM != OLD_CMD(0x7)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_SETQLIM OLD_CMD(0x7)
#endif
#if defined(Q_V1_GETSTATS) || (defined(HAVE_DECL_Q_V1_GETSTATS) && HAVE_DECL_Q_V1_GETSTATS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V1_GETSTATS) == (OLD_CMD(0x8)), "Q_V1_GETSTATS != OLD_CMD(0x8)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V1_GETSTATS OLD_CMD(0x8)
#endif
#if defined(Q_V1_RSQUASH) || (defined(HAVE_DECL_Q_V1_RSQUASH) && HAVE_DECL_Q_V1_RSQUASH)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V1_RSQUASH) == (OLD_CMD(0x10)), "Q_V1_RSQUASH != OLD_CMD(0x10)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V1_RSQUASH OLD_CMD(0x10)
#endif
#if defined(Q_V2_GETQUOTA) || (defined(HAVE_DECL_Q_V2_GETQUOTA) && HAVE_DECL_Q_V2_GETQUOTA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V2_GETQUOTA) == (OLD_CMD(0xD)), "Q_V2_GETQUOTA != OLD_CMD(0xD)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V2_GETQUOTA OLD_CMD(0xD)
#endif
#if defined(Q_V2_SETQUOTA) || (defined(HAVE_DECL_Q_V2_SETQUOTA) && HAVE_DECL_Q_V2_SETQUOTA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V2_SETQUOTA) == (OLD_CMD(0xE)), "Q_V2_SETQUOTA != OLD_CMD(0xE)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V2_SETQUOTA OLD_CMD(0xE)
#endif
#if defined(Q_V2_SETUSE) || (defined(HAVE_DECL_Q_V2_SETUSE) && HAVE_DECL_Q_V2_SETUSE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V2_SETUSE) == (OLD_CMD(0xF)), "Q_V2_SETUSE != OLD_CMD(0xF)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V2_SETUSE OLD_CMD(0xF)
#endif
#if defined(Q_V2_GETINFO) || (defined(HAVE_DECL_Q_V2_GETINFO) && HAVE_DECL_Q_V2_GETINFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V2_GETINFO) == (OLD_CMD(0x9)), "Q_V2_GETINFO != OLD_CMD(0x9)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V2_GETINFO OLD_CMD(0x9)
#endif
#if defined(Q_V2_SETINFO) || (defined(HAVE_DECL_Q_V2_SETINFO) && HAVE_DECL_Q_V2_SETINFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V2_SETINFO) == (OLD_CMD(0xA)), "Q_V2_SETINFO != OLD_CMD(0xA)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V2_SETINFO OLD_CMD(0xA)
#endif
#if defined(Q_V2_SETGRACE) || (defined(HAVE_DECL_Q_V2_SETGRACE) && HAVE_DECL_Q_V2_SETGRACE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V2_SETGRACE) == (OLD_CMD(0xB)), "Q_V2_SETGRACE != OLD_CMD(0xB)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V2_SETGRACE OLD_CMD(0xB)
#endif
#if defined(Q_V2_SETFLAGS) || (defined(HAVE_DECL_Q_V2_SETFLAGS) && HAVE_DECL_Q_V2_SETFLAGS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V2_SETFLAGS) == (OLD_CMD(0xC)), "Q_V2_SETFLAGS != OLD_CMD(0xC)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V2_SETFLAGS OLD_CMD(0xC)
#endif
#if defined(Q_V2_GETSTATS) || (defined(HAVE_DECL_Q_V2_GETSTATS) && HAVE_DECL_Q_V2_GETSTATS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_V2_GETSTATS) == (OLD_CMD(0x11)), "Q_V2_GETSTATS != OLD_CMD(0x11)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_V2_GETSTATS OLD_CMD(0x11)
#endif
#if defined(Q_SYNC) || (defined(HAVE_DECL_Q_SYNC) && HAVE_DECL_Q_SYNC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_SYNC) == (NEW_CMD(0x1)), "Q_SYNC != NEW_CMD(0x1)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_SYNC NEW_CMD(0x1)
#endif
#if defined(Q_QUOTAON) || (defined(HAVE_DECL_Q_QUOTAON) && HAVE_DECL_Q_QUOTAON)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_QUOTAON) == (NEW_CMD(0x2)), "Q_QUOTAON != NEW_CMD(0x2)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_QUOTAON NEW_CMD(0x2)
#endif
#if defined(Q_QUOTAOFF) || (defined(HAVE_DECL_Q_QUOTAOFF) && HAVE_DECL_Q_QUOTAOFF)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_QUOTAOFF) == (NEW_CMD(0x3)), "Q_QUOTAOFF != NEW_CMD(0x3)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_QUOTAOFF NEW_CMD(0x3)
#endif
#if defined(Q_GETFMT) || (defined(HAVE_DECL_Q_GETFMT) && HAVE_DECL_Q_GETFMT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_GETFMT) == (NEW_CMD(0x4)), "Q_GETFMT != NEW_CMD(0x4)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_GETFMT NEW_CMD(0x4)
#endif
#if defined(Q_GETINFO) || (defined(HAVE_DECL_Q_GETINFO) && HAVE_DECL_Q_GETINFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_GETINFO) == (NEW_CMD(0x5)), "Q_GETINFO != NEW_CMD(0x5)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_GETINFO NEW_CMD(0x5)
#endif
#if defined(Q_SETINFO) || (defined(HAVE_DECL_Q_SETINFO) && HAVE_DECL_Q_SETINFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_SETINFO) == (NEW_CMD(0x6)), "Q_SETINFO != NEW_CMD(0x6)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_SETINFO NEW_CMD(0x6)
#endif
#if defined(Q_GETQUOTA) || (defined(HAVE_DECL_Q_GETQUOTA) && HAVE_DECL_Q_GETQUOTA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_GETQUOTA) == (NEW_CMD(0x7)), "Q_GETQUOTA != NEW_CMD(0x7)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_GETQUOTA NEW_CMD(0x7)
#endif
#if defined(Q_SETQUOTA) || (defined(HAVE_DECL_Q_SETQUOTA) && HAVE_DECL_Q_SETQUOTA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_SETQUOTA) == (NEW_CMD(0x8)), "Q_SETQUOTA != NEW_CMD(0x8)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_SETQUOTA NEW_CMD(0x8)
#endif
#if defined(Q_GETNEXTQUOTA) || (defined(HAVE_DECL_Q_GETNEXTQUOTA) && HAVE_DECL_Q_GETNEXTQUOTA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_GETNEXTQUOTA) == (NEW_CMD(0x9)), "Q_GETNEXTQUOTA != NEW_CMD(0x9)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_GETNEXTQUOTA NEW_CMD(0x9)
#endif
#if defined(Q_XQUOTAON) || (defined(HAVE_DECL_Q_XQUOTAON) && HAVE_DECL_Q_XQUOTAON)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_XQUOTAON) == (XQM_CMD(0x1)), "Q_XQUOTAON != XQM_CMD(0x1)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_XQUOTAON XQM_CMD(0x1)
#endif
#if defined(Q_XQUOTAOFF) || (defined(HAVE_DECL_Q_XQUOTAOFF) && HAVE_DECL_Q_XQUOTAOFF)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_XQUOTAOFF) == (XQM_CMD(0x2)), "Q_XQUOTAOFF != XQM_CMD(0x2)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_XQUOTAOFF XQM_CMD(0x2)
#endif
#if defined(Q_XGETQUOTA) || (defined(HAVE_DECL_Q_XGETQUOTA) && HAVE_DECL_Q_XGETQUOTA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_XGETQUOTA) == (XQM_CMD(0x3)), "Q_XGETQUOTA != XQM_CMD(0x3)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_XGETQUOTA XQM_CMD(0x3)
#endif
#if defined(Q_XSETQLIM) || (defined(HAVE_DECL_Q_XSETQLIM) && HAVE_DECL_Q_XSETQLIM)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_XSETQLIM) == (XQM_CMD(0x4)), "Q_XSETQLIM != XQM_CMD(0x4)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_XSETQLIM XQM_CMD(0x4)
#endif
#if defined(Q_XGETQSTAT) || (defined(HAVE_DECL_Q_XGETQSTAT) && HAVE_DECL_Q_XGETQSTAT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_XGETQSTAT) == (XQM_CMD(0x5)), "Q_XGETQSTAT != XQM_CMD(0x5)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_XGETQSTAT XQM_CMD(0x5)
#endif
#if defined(Q_XQUOTARM) || (defined(HAVE_DECL_Q_XQUOTARM) && HAVE_DECL_Q_XQUOTARM)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_XQUOTARM) == (XQM_CMD(0x6)), "Q_XQUOTARM != XQM_CMD(0x6)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_XQUOTARM XQM_CMD(0x6)
#endif
#if defined(Q_XQUOTASYNC) || (defined(HAVE_DECL_Q_XQUOTASYNC) && HAVE_DECL_Q_XQUOTASYNC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_XQUOTASYNC) == (XQM_CMD(0x7)), "Q_XQUOTASYNC != XQM_CMD(0x7)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_XQUOTASYNC XQM_CMD(0x7)
#endif
#if defined(Q_XGETQSTATV) || (defined(HAVE_DECL_Q_XGETQSTATV) && HAVE_DECL_Q_XGETQSTATV)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_XGETQSTATV) == (XQM_CMD(0x8)), "Q_XGETQSTATV != XQM_CMD(0x8)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_XGETQSTATV XQM_CMD(0x8)
#endif
#if defined(Q_XGETNEXTQUOTA) || (defined(HAVE_DECL_Q_XGETNEXTQUOTA) && HAVE_DECL_Q_XGETNEXTQUOTA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((Q_XGETNEXTQUOTA) == (XQM_CMD(0x9)), "Q_XGETNEXTQUOTA != XQM_CMD(0x9)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define Q_XGETNEXTQUOTA XQM_CMD(0x9)
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat quotacmds in mpers mode

# else

static
const struct xlat quotacmds[] = {
 XLAT(Q_V1_QUOTAON),
 XLAT(Q_V1_QUOTAOFF),
 XLAT(Q_V1_GETQUOTA),
 XLAT(Q_V1_SETQUOTA),
 XLAT(Q_V1_SETUSE),
 XLAT(Q_V1_SYNC),
 XLAT(Q_SETQLIM),
 XLAT(Q_V1_GETSTATS),
 XLAT(Q_V1_RSQUASH),

 XLAT(Q_V2_GETQUOTA),
 XLAT(Q_V2_SETQUOTA),
 XLAT(Q_V2_SETUSE),
 XLAT(Q_V2_GETINFO),
 XLAT(Q_V2_SETINFO),
 XLAT(Q_V2_SETGRACE),
 XLAT(Q_V2_SETFLAGS),
 XLAT(Q_V2_GETSTATS),

 XLAT(Q_SYNC),
 XLAT(Q_QUOTAON),
 XLAT(Q_QUOTAOFF),
 XLAT(Q_GETFMT),
 XLAT(Q_GETINFO),
 XLAT(Q_SETINFO),
 XLAT(Q_GETQUOTA),
 XLAT(Q_SETQUOTA),
 XLAT(Q_GETNEXTQUOTA),

 XLAT(Q_XQUOTAON),
 XLAT(Q_XQUOTAOFF),
 XLAT(Q_XGETQUOTA),
 XLAT(Q_XSETQLIM),
 XLAT(Q_XGETQSTAT),
 XLAT(Q_XQUOTARM),
 XLAT(Q_XQUOTASYNC),
 XLAT(Q_XGETQSTATV),
 XLAT(Q_XGETNEXTQUOTA),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
