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

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

#if defined(IOPRIO_WHO_PROCESS) || (defined(HAVE_DECL_IOPRIO_WHO_PROCESS) && HAVE_DECL_IOPRIO_WHO_PROCESS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IOPRIO_WHO_PROCESS) == (1), "IOPRIO_WHO_PROCESS != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IOPRIO_WHO_PROCESS 1
#endif
#if defined(IOPRIO_WHO_PGRP) || (defined(HAVE_DECL_IOPRIO_WHO_PGRP) && HAVE_DECL_IOPRIO_WHO_PGRP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IOPRIO_WHO_PGRP) == (2), "IOPRIO_WHO_PGRP != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IOPRIO_WHO_PGRP 2
#endif
#if defined(IOPRIO_WHO_USER) || (defined(HAVE_DECL_IOPRIO_WHO_USER) && HAVE_DECL_IOPRIO_WHO_USER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IOPRIO_WHO_USER) == (3), "IOPRIO_WHO_USER != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IOPRIO_WHO_USER 3
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat ioprio_who in mpers mode

# else

static
const struct xlat ioprio_who[] = {
 XLAT(IOPRIO_WHO_PROCESS),
 XLAT(IOPRIO_WHO_PGRP),
 XLAT(IOPRIO_WHO_USER),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
