get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/808793/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 808793,
    "url": "http://patchwork.ozlabs.org/api/patches/808793/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170901153758.8628-45-armbru@redhat.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20170901153758.8628-45-armbru@redhat.com>",
    "list_archive_url": null,
    "date": "2017-09-01T15:37:55",
    "name": "[PULL,v2,44/47] qapi: Mechanically convert FOO_lookup[...] to FOO_str(...)",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "2c3efea49d61cf135c8c379b70567b8967457c66",
    "submitter": {
        "id": 2645,
        "url": "http://patchwork.ozlabs.org/api/people/2645/?format=api",
        "name": "Markus Armbruster",
        "email": "armbru@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170901153758.8628-45-armbru@redhat.com/mbox/",
    "series": [
        {
            "id": 1049,
            "url": "http://patchwork.ozlabs.org/api/series/1049/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=1049",
            "date": "2017-09-01T15:37:14",
            "name": "[PULL,v2,01/47] qapi: Fix error handling code on alternate conflict",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/1049/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/808793/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/808793/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=208.118.235.17; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)",
            "ext-mx09.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com",
            "ext-mx09.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=armbru@redhat.com"
        ],
        "Received": [
            "from lists.gnu.org (lists.gnu.org [208.118.235.17])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xkPV43lr0z9t1t\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat,  2 Sep 2017 02:15:24 +1000 (AEST)",
            "from localhost ([::1]:47027 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dnobK-0001Vm-As\n\tfor incoming@patchwork.ozlabs.org; Fri, 01 Sep 2017 12:15:22 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:51818)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <armbru@redhat.com>) id 1dno1Y-0006qK-EJ\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 11:38:30 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <armbru@redhat.com>) id 1dno1O-0001lu-0K\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 11:38:24 -0400",
            "from mx1.redhat.com ([209.132.183.28]:41810)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <armbru@redhat.com>) id 1dno1N-0001kA-KO\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 11:38:13 -0400",
            "from smtp.corp.redhat.com\n\t(int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 973D42DDB9\n\tfor <qemu-devel@nongnu.org>; Fri,  1 Sep 2017 15:38:12 +0000 (UTC)",
            "from blackfin.pond.sub.org (ovpn-116-75.ams2.redhat.com\n\t[10.36.116.75])\n\tby smtp.corp.redhat.com (Postfix) with ESMTPS id B310C808E6\n\tfor <qemu-devel@nongnu.org>; Fri,  1 Sep 2017 15:38:11 +0000 (UTC)",
            "by blackfin.pond.sub.org (Postfix, from userid 1000)\n\tid C3F3E1132F4D; Fri,  1 Sep 2017 17:37:58 +0200 (CEST)"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com 973D42DDB9",
        "From": "Markus Armbruster <armbru@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Date": "Fri,  1 Sep 2017 17:37:55 +0200",
        "Message-Id": "<20170901153758.8628-45-armbru@redhat.com>",
        "In-Reply-To": "<20170901153758.8628-1-armbru@redhat.com>",
        "References": "<20170901153758.8628-1-armbru@redhat.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.13",
        "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.38]);\n\tFri, 01 Sep 2017 15:38:12 +0000 (UTC)",
        "Content-Transfer-Encoding": "quoted-printable",
        "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]",
        "X-Received-From": "209.132.183.28",
        "Subject": "[Qemu-devel] [PULL v2 44/47] qapi: Mechanically convert\n\tFOO_lookup[...] to FOO_str(...)",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.21",
        "Precedence": "list",
        "List-Id": "<qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"
    },
    "content": "Signed-off-by: Markus Armbruster <armbru@redhat.com>\nMessage-Id: <1503564371-26090-14-git-send-email-armbru@redhat.com>\nReviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>\n---\n backends/hostmem.c                  |  2 +-\n block/backup.c                      |  2 +-\n block/file-posix.c                  |  4 +--\n block/file-win32.c                  |  2 +-\n block/gluster.c                     |  4 +--\n block/iscsi.c                       |  2 +-\n block/nfs.c                         |  2 +-\n block/qcow2.c                       |  4 +--\n block/qed.c                         |  2 +-\n block/rbd.c                         |  2 +-\n block/sheepdog.c                    |  2 +-\n blockdev.c                          |  4 +--\n blockjob.c                          |  6 ++---\n chardev/char.c                      |  4 +--\n crypto/block-luks.c                 | 12 ++++-----\n crypto/block.c                      |  4 +--\n crypto/cipher-afalg.c               |  2 +-\n crypto/cipher-builtin.c             |  8 +++---\n crypto/cipher-gcrypt.c              |  4 +--\n crypto/cipher-nettle.c              |  8 +++---\n crypto/hmac-gcrypt.c                |  2 +-\n crypto/hmac-glib.c                  |  2 +-\n crypto/hmac-nettle.c                |  2 +-\n crypto/pbkdf-gcrypt.c               |  2 +-\n crypto/pbkdf-nettle.c               |  2 +-\n hmp.c                               | 54 ++++++++++++++++++-------------------\n hw/block/fdc.c                      |  6 ++---\n hw/char/escc.c                      |  2 +-\n hw/input/virtio-input-hid.c         |  4 +--\n migration/colo-failover.c           |  4 +--\n migration/colo.c                    | 14 +++++-----\n migration/global_state.c            |  2 +-\n monitor.c                           | 16 +++++------\n net/net.c                           |  4 +--\n qapi/qmp-dispatch.c                 |  2 +-\n tests/test-qapi-util.c              |  2 +-\n tests/test-qobject-input-visitor.c  |  4 +--\n tests/test-qobject-output-visitor.c |  2 +-\n tests/test-string-input-visitor.c   |  2 +-\n tests/test-string-output-visitor.c  |  4 +--\n tpm.c                               |  2 +-\n ui/input-legacy.c                   |  4 +--\n ui/input.c                          | 12 ++++-----\n ui/vnc.c                            |  6 ++---\n vl.c                                |  6 ++---\n 45 files changed, 121 insertions(+), 121 deletions(-)",
    "diff": "diff --git a/backends/hostmem.c b/backends/hostmem.c\nindex 4606b73849..06e8898e40 100644\n--- a/backends/hostmem.c\n+++ b/backends/hostmem.c\n@@ -304,7 +304,7 @@ host_memory_backend_memory_complete(UserCreatable *uc, Error **errp)\n             return;\n         } else if (maxnode == 0 && backend->policy != MPOL_DEFAULT) {\n             error_setg(errp, \"host-nodes must be set for policy %s\",\n-                       HostMemPolicy_lookup[backend->policy]);\n+                       HostMemPolicy_str(backend->policy));\n             return;\n         }\n \ndiff --git a/block/backup.c b/block/backup.c\nindex 504a089150..517c300a49 100644\n--- a/block/backup.c\n+++ b/block/backup.c\n@@ -596,7 +596,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,\n         error_setg(errp,\n                    \"a sync_bitmap was provided to backup_run, \"\n                    \"but received an incompatible sync_mode (%s)\",\n-                   MirrorSyncMode_lookup[sync_mode]);\n+                   MirrorSyncMode_str(sync_mode));\n         return NULL;\n     }\n \ndiff --git a/block/file-posix.c b/block/file-posix.c\nindex d81eccc191..bfef91db63 100644\n--- a/block/file-posix.c\n+++ b/block/file-posix.c\n@@ -1724,7 +1724,7 @@ static int raw_regular_truncate(int fd, int64_t offset, PreallocMode prealloc,\n     default:\n         result = -ENOTSUP;\n         error_setg(errp, \"Unsupported preallocation mode: %s\",\n-                   PreallocMode_lookup[prealloc]);\n+                   PreallocMode_str(prealloc));\n         return result;\n     }\n \n@@ -1759,7 +1759,7 @@ static int raw_truncate(BlockDriverState *bs, int64_t offset,\n \n     if (prealloc != PREALLOC_MODE_OFF) {\n         error_setg(errp, \"Preallocation mode '%s' unsupported for this \"\n-                   \"non-regular file\", PreallocMode_lookup[prealloc]);\n+                   \"non-regular file\", PreallocMode_str(prealloc));\n         return -ENOTSUP;\n     }\n \ndiff --git a/block/file-win32.c b/block/file-win32.c\nindex 192ea819d9..f2a1830060 100644\n--- a/block/file-win32.c\n+++ b/block/file-win32.c\n@@ -469,7 +469,7 @@ static int raw_truncate(BlockDriverState *bs, int64_t offset,\n \n     if (prealloc != PREALLOC_MODE_OFF) {\n         error_setg(errp, \"Unsupported preallocation mode '%s'\",\n-                   PreallocMode_lookup[prealloc]);\n+                   PreallocMode_str(prealloc));\n         return -ENOTSUP;\n     }\n \ndiff --git a/block/gluster.c b/block/gluster.c\nindex 0614e0c8aa..29f9427e47 100644\n--- a/block/gluster.c\n+++ b/block/gluster.c\n@@ -1047,7 +1047,7 @@ static int qemu_gluster_create(const char *filename,\n     default:\n         ret = -EINVAL;\n         error_setg(errp, \"Unsupported preallocation mode: %s\",\n-                   PreallocMode_lookup[prealloc]);\n+                   PreallocMode_str(prealloc));\n         break;\n     }\n \n@@ -1099,7 +1099,7 @@ static int qemu_gluster_truncate(BlockDriverState *bs, int64_t offset,\n \n     if (prealloc != PREALLOC_MODE_OFF) {\n         error_setg(errp, \"Unsupported preallocation mode '%s'\",\n-                   PreallocMode_lookup[prealloc]);\n+                   PreallocMode_str(prealloc));\n         return -ENOTSUP;\n     }\n \ndiff --git a/block/iscsi.c b/block/iscsi.c\nindex d557c99668..8b47d30dcc 100644\n--- a/block/iscsi.c\n+++ b/block/iscsi.c\n@@ -2087,7 +2087,7 @@ static int iscsi_truncate(BlockDriverState *bs, int64_t offset,\n \n     if (prealloc != PREALLOC_MODE_OFF) {\n         error_setg(errp, \"Unsupported preallocation mode '%s'\",\n-                   PreallocMode_lookup[prealloc]);\n+                   PreallocMode_str(prealloc));\n         return -ENOTSUP;\n     }\n \ndiff --git a/block/nfs.c b/block/nfs.c\nindex bec16b72a6..337fcd9c84 100644\n--- a/block/nfs.c\n+++ b/block/nfs.c\n@@ -772,7 +772,7 @@ static int nfs_file_truncate(BlockDriverState *bs, int64_t offset,\n \n     if (prealloc != PREALLOC_MODE_OFF) {\n         error_setg(errp, \"Unsupported preallocation mode '%s'\",\n-                   PreallocMode_lookup[prealloc]);\n+                   PreallocMode_str(prealloc));\n         return -ENOTSUP;\n     }\n \ndiff --git a/block/qcow2.c b/block/qcow2.c\nindex 3a93983e3f..cbe9681fb0 100644\n--- a/block/qcow2.c\n+++ b/block/qcow2.c\n@@ -2715,7 +2715,7 @@ static int qcow2_create2(const char *filename, int64_t total_size,\n         int64_t prealloc_size =\n             qcow2_calc_prealloc_size(total_size, cluster_size, refcount_order);\n         qemu_opt_set_number(opts, BLOCK_OPT_SIZE, prealloc_size, &error_abort);\n-        qemu_opt_set(opts, BLOCK_OPT_PREALLOC, PreallocMode_lookup[prealloc],\n+        qemu_opt_set(opts, BLOCK_OPT_PREALLOC, PreallocMode_str(prealloc),\n                      &error_abort);\n     }\n \n@@ -3080,7 +3080,7 @@ static int qcow2_truncate(BlockDriverState *bs, int64_t offset,\n         prealloc != PREALLOC_MODE_FALLOC && prealloc != PREALLOC_MODE_FULL)\n     {\n         error_setg(errp, \"Unsupported preallocation mode '%s'\",\n-                   PreallocMode_lookup[prealloc]);\n+                   PreallocMode_str(prealloc));\n         return -ENOTSUP;\n     }\n \ndiff --git a/block/qed.c b/block/qed.c\nindex dc54bf4a93..28e2ec89e8 100644\n--- a/block/qed.c\n+++ b/block/qed.c\n@@ -1399,7 +1399,7 @@ static int bdrv_qed_truncate(BlockDriverState *bs, int64_t offset,\n \n     if (prealloc != PREALLOC_MODE_OFF) {\n         error_setg(errp, \"Unsupported preallocation mode '%s'\",\n-                   PreallocMode_lookup[prealloc]);\n+                   PreallocMode_str(prealloc));\n         return -ENOTSUP;\n     }\n \ndiff --git a/block/rbd.c b/block/rbd.c\nindex 9c3aa638e7..144f350e1f 100644\n--- a/block/rbd.c\n+++ b/block/rbd.c\n@@ -944,7 +944,7 @@ static int qemu_rbd_truncate(BlockDriverState *bs, int64_t offset,\n \n     if (prealloc != PREALLOC_MODE_OFF) {\n         error_setg(errp, \"Unsupported preallocation mode '%s'\",\n-                   PreallocMode_lookup[prealloc]);\n+                   PreallocMode_str(prealloc));\n         return -ENOTSUP;\n     }\n \ndiff --git a/block/sheepdog.c b/block/sheepdog.c\nindex abb2e79065..1052098ec5 100644\n--- a/block/sheepdog.c\n+++ b/block/sheepdog.c\n@@ -2176,7 +2176,7 @@ static int sd_truncate(BlockDriverState *bs, int64_t offset,\n \n     if (prealloc != PREALLOC_MODE_OFF) {\n         error_setg(errp, \"Unsupported preallocation mode '%s'\",\n-                   PreallocMode_lookup[prealloc]);\n+                   PreallocMode_str(prealloc));\n         return -ENOTSUP;\n     }\n \ndiff --git a/blockdev.c b/blockdev.c\nindex f90bc9399a..bfb2a95299 100644\n--- a/blockdev.c\n+++ b/blockdev.c\n@@ -1466,8 +1466,8 @@ static int action_check_completion_mode(BlkActionState *s, Error **errp)\n         error_setg(errp,\n                    \"Action '%s' does not support Transaction property \"\n                    \"completion-mode = %s\",\n-                   TransactionActionKind_lookup[s->action->type],\n-                   ActionCompletionMode_lookup[s->txn_props->completion_mode]);\n+                   TransactionActionKind_str(s->action->type),\n+                   ActionCompletionMode_str(s->txn_props->completion_mode));\n         return -1;\n     }\n     return 0;\ndiff --git a/blockjob.c b/blockjob.c\nindex 70a78188b7..3a0c49137e 100644\n--- a/blockjob.c\n+++ b/blockjob.c\n@@ -208,7 +208,7 @@ static char *child_job_get_parent_desc(BdrvChild *c)\n {\n     BlockJob *job = c->opaque;\n     return g_strdup_printf(\"%s job '%s'\",\n-                           BlockJobType_lookup[job->driver->job_type],\n+                           BlockJobType_str(job->driver->job_type),\n                            job->id);\n }\n \n@@ -553,7 +553,7 @@ BlockJobInfo *block_job_query(BlockJob *job, Error **errp)\n         return NULL;\n     }\n     info = g_new0(BlockJobInfo, 1);\n-    info->type      = g_strdup(BlockJobType_lookup[job->driver->job_type]);\n+    info->type      = g_strdup(BlockJobType_str(job->driver->job_type));\n     info->device    = g_strdup(job->id);\n     info->len       = job->len;\n     info->busy      = job->busy;\n@@ -666,7 +666,7 @@ void *block_job_create(const char *job_id, const BlockJobDriver *driver,\n     job->refcnt        = 1;\n \n     error_setg(&job->blocker, \"block device is in use by block job: %s\",\n-               BlockJobType_lookup[driver->job_type]);\n+               BlockJobType_str(driver->job_type));\n     block_job_add_bdrv(job, \"main node\", bs, 0, BLK_PERM_ALL, &error_abort);\n     bs->job = job;\n \ndiff --git a/chardev/char.c b/chardev/char.c\nindex 5d283b90d3..b6fd5eb6a6 100644\n--- a/chardev/char.c\n+++ b/chardev/char.c\n@@ -931,7 +931,7 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,\n     ChardevReturn *ret;\n     Chardev *chr;\n \n-    cc = char_get_class(ChardevBackendKind_lookup[backend->type], errp);\n+    cc = char_get_class(ChardevBackendKind_str(backend->type), errp);\n     if (!cc) {\n         return NULL;\n     }\n@@ -989,7 +989,7 @@ ChardevReturn *qmp_chardev_change(const char *id, ChardevBackend *backend,\n         return NULL;\n     }\n \n-    cc = char_get_class(ChardevBackendKind_lookup[backend->type], errp);\n+    cc = char_get_class(ChardevBackendKind_str(backend->type), errp);\n     if (!cc) {\n         return NULL;\n     }\ndiff --git a/crypto/block-luks.c b/crypto/block-luks.c\nindex 84d189a426..4e828951d4 100644\n--- a/crypto/block-luks.c\n+++ b/crypto/block-luks.c\n@@ -257,7 +257,7 @@ qcrypto_block_luks_cipher_alg_lookup(QCryptoCipherAlgorithm alg,\n     }\n \n     error_setg(errp, \"Algorithm '%s' not supported\",\n-               QCryptoCipherAlgorithm_lookup[alg]);\n+               QCryptoCipherAlgorithm_str(alg));\n     return NULL;\n }\n \n@@ -392,7 +392,7 @@ qcrypto_block_luks_essiv_cipher(QCryptoCipherAlgorithm cipher,\n         break;\n     default:\n         error_setg(errp, \"Cipher %s not supported with essiv\",\n-                   QCryptoCipherAlgorithm_lookup[cipher]);\n+                   QCryptoCipherAlgorithm_str(cipher));\n         return 0;\n     }\n }\n@@ -962,16 +962,16 @@ qcrypto_block_luks_create(QCryptoBlock *block,\n         goto error;\n     }\n \n-    cipher_mode = QCryptoCipherMode_lookup[luks_opts.cipher_mode];\n-    ivgen_alg = QCryptoIVGenAlgorithm_lookup[luks_opts.ivgen_alg];\n+    cipher_mode = QCryptoCipherMode_str(luks_opts.cipher_mode);\n+    ivgen_alg = QCryptoIVGenAlgorithm_str(luks_opts.ivgen_alg);\n     if (luks_opts.has_ivgen_hash_alg) {\n-        ivgen_hash_alg = QCryptoHashAlgorithm_lookup[luks_opts.ivgen_hash_alg];\n+        ivgen_hash_alg = QCryptoHashAlgorithm_str(luks_opts.ivgen_hash_alg);\n         cipher_mode_spec = g_strdup_printf(\"%s-%s:%s\", cipher_mode, ivgen_alg,\n                                            ivgen_hash_alg);\n     } else {\n         cipher_mode_spec = g_strdup_printf(\"%s-%s\", cipher_mode, ivgen_alg);\n     }\n-    hash_alg = QCryptoHashAlgorithm_lookup[luks_opts.hash_alg];\n+    hash_alg = QCryptoHashAlgorithm_str(luks_opts.hash_alg);\n \n \n     if (strlen(cipher_alg) >= QCRYPTO_BLOCK_LUKS_CIPHER_NAME_LEN) {\ndiff --git a/crypto/block.c b/crypto/block.c\nindex b097d451af..c382393d9a 100644\n--- a/crypto/block.c\n+++ b/crypto/block.c\n@@ -61,7 +61,7 @@ QCryptoBlock *qcrypto_block_open(QCryptoBlockOpenOptions *options,\n     if (options->format >= G_N_ELEMENTS(qcrypto_block_drivers) ||\n         !qcrypto_block_drivers[options->format]) {\n         error_setg(errp, \"Unsupported block driver %s\",\n-                   QCryptoBlockFormat_lookup[options->format]);\n+                   QCryptoBlockFormat_str(options->format));\n         g_free(block);\n         return NULL;\n     }\n@@ -92,7 +92,7 @@ QCryptoBlock *qcrypto_block_create(QCryptoBlockCreateOptions *options,\n     if (options->format >= G_N_ELEMENTS(qcrypto_block_drivers) ||\n         !qcrypto_block_drivers[options->format]) {\n         error_setg(errp, \"Unsupported block driver %s\",\n-                   QCryptoBlockFormat_lookup[options->format]);\n+                   QCryptoBlockFormat_str(options->format));\n         g_free(block);\n         return NULL;\n     }\ndiff --git a/crypto/cipher-afalg.c b/crypto/cipher-afalg.c\nindex 01343b2b7c..cd72284690 100644\n--- a/crypto/cipher-afalg.c\n+++ b/crypto/cipher-afalg.c\n@@ -52,7 +52,7 @@ qcrypto_afalg_cipher_format_name(QCryptoCipherAlgorithm alg,\n         return NULL;\n     }\n \n-    mode_name = QCryptoCipherMode_lookup[mode];\n+    mode_name = QCryptoCipherMode_str(mode);\n     name = g_strdup_printf(\"%s(%s)\", mode_name, alg_name);\n \n     return name;\ndiff --git a/crypto/cipher-builtin.c b/crypto/cipher-builtin.c\nindex 16a36d4532..d8c811fd33 100644\n--- a/crypto/cipher-builtin.c\n+++ b/crypto/cipher-builtin.c\n@@ -247,7 +247,7 @@ qcrypto_cipher_init_aes(QCryptoCipherMode mode,\n         mode != QCRYPTO_CIPHER_MODE_ECB &&\n         mode != QCRYPTO_CIPHER_MODE_XTS) {\n         error_setg(errp, \"Unsupported cipher mode %s\",\n-                   QCryptoCipherMode_lookup[mode]);\n+                   QCryptoCipherMode_str(mode));\n         return NULL;\n     }\n \n@@ -379,7 +379,7 @@ qcrypto_cipher_init_des_rfb(QCryptoCipherMode mode,\n \n     if (mode != QCRYPTO_CIPHER_MODE_ECB) {\n         error_setg(errp, \"Unsupported cipher mode %s\",\n-                   QCryptoCipherMode_lookup[mode]);\n+                   QCryptoCipherMode_str(mode));\n         return NULL;\n     }\n \n@@ -440,7 +440,7 @@ static QCryptoCipherBuiltin *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg,\n         break;\n     default:\n         error_setg(errp, \"Unsupported cipher mode %s\",\n-                   QCryptoCipherMode_lookup[mode]);\n+                   QCryptoCipherMode_str(mode));\n         return NULL;\n     }\n \n@@ -460,7 +460,7 @@ static QCryptoCipherBuiltin *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg,\n     default:\n         error_setg(errp,\n                    \"Unsupported cipher algorithm %s\",\n-                   QCryptoCipherAlgorithm_lookup[alg]);\n+                   QCryptoCipherAlgorithm_str(alg));\n         return NULL;\n     }\n \ndiff --git a/crypto/cipher-gcrypt.c b/crypto/cipher-gcrypt.c\nindex 0489147398..10d75da75d 100644\n--- a/crypto/cipher-gcrypt.c\n+++ b/crypto/cipher-gcrypt.c\n@@ -105,7 +105,7 @@ static QCryptoCipherGcrypt *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg,\n         break;\n     default:\n         error_setg(errp, \"Unsupported cipher mode %s\",\n-                   QCryptoCipherMode_lookup[mode]);\n+                   QCryptoCipherMode_str(mode));\n         return NULL;\n     }\n \n@@ -160,7 +160,7 @@ static QCryptoCipherGcrypt *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg,\n \n     default:\n         error_setg(errp, \"Unsupported cipher algorithm %s\",\n-                   QCryptoCipherAlgorithm_lookup[alg]);\n+                   QCryptoCipherAlgorithm_str(alg));\n         return NULL;\n     }\n \ndiff --git a/crypto/cipher-nettle.c b/crypto/cipher-nettle.c\nindex c51f119cbc..3848cb3b3a 100644\n--- a/crypto/cipher-nettle.c\n+++ b/crypto/cipher-nettle.c\n@@ -281,7 +281,7 @@ static QCryptoCipherNettle *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg,\n         break;\n     default:\n         error_setg(errp, \"Unsupported cipher mode %s\",\n-                   QCryptoCipherMode_lookup[mode]);\n+                   QCryptoCipherMode_str(mode));\n         return NULL;\n     }\n \n@@ -420,7 +420,7 @@ static QCryptoCipherNettle *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg,\n \n     default:\n         error_setg(errp, \"Unsupported cipher algorithm %s\",\n-                   QCryptoCipherAlgorithm_lookup[alg]);\n+                   QCryptoCipherAlgorithm_str(alg));\n         goto error;\n     }\n \n@@ -491,7 +491,7 @@ qcrypto_nettle_cipher_encrypt(QCryptoCipher *cipher,\n \n     default:\n         error_setg(errp, \"Unsupported cipher mode %s\",\n-                   QCryptoCipherMode_lookup[cipher->mode]);\n+                   QCryptoCipherMode_str(cipher->mode));\n         return -1;\n     }\n     return 0;\n@@ -537,7 +537,7 @@ qcrypto_nettle_cipher_decrypt(QCryptoCipher *cipher,\n \n     default:\n         error_setg(errp, \"Unsupported cipher mode %s\",\n-                   QCryptoCipherMode_lookup[cipher->mode]);\n+                   QCryptoCipherMode_str(cipher->mode));\n         return -1;\n     }\n     return 0;\ndiff --git a/crypto/hmac-gcrypt.c b/crypto/hmac-gcrypt.c\nindex 76ca61ba24..0c6f979711 100644\n--- a/crypto/hmac-gcrypt.c\n+++ b/crypto/hmac-gcrypt.c\n@@ -52,7 +52,7 @@ void *qcrypto_hmac_ctx_new(QCryptoHashAlgorithm alg,\n \n     if (!qcrypto_hmac_supports(alg)) {\n         error_setg(errp, \"Unsupported hmac algorithm %s\",\n-                   QCryptoHashAlgorithm_lookup[alg]);\n+                   QCryptoHashAlgorithm_str(alg));\n         return NULL;\n     }\n \ndiff --git a/crypto/hmac-glib.c b/crypto/hmac-glib.c\nindex 8cf6b221ed..a6c1730291 100644\n--- a/crypto/hmac-glib.c\n+++ b/crypto/hmac-glib.c\n@@ -58,7 +58,7 @@ void *qcrypto_hmac_ctx_new(QCryptoHashAlgorithm alg,\n \n     if (!qcrypto_hmac_supports(alg)) {\n         error_setg(errp, \"Unsupported hmac algorithm %s\",\n-                   QCryptoHashAlgorithm_lookup[alg]);\n+                   QCryptoHashAlgorithm_str(alg));\n         return NULL;\n     }\n \ndiff --git a/crypto/hmac-nettle.c b/crypto/hmac-nettle.c\nindex 1d5a915f03..ec2d61bdde 100644\n--- a/crypto/hmac-nettle.c\n+++ b/crypto/hmac-nettle.c\n@@ -106,7 +106,7 @@ void *qcrypto_hmac_ctx_new(QCryptoHashAlgorithm alg,\n \n     if (!qcrypto_hmac_supports(alg)) {\n         error_setg(errp, \"Unsupported hmac algorithm %s\",\n-                   QCryptoHashAlgorithm_lookup[alg]);\n+                   QCryptoHashAlgorithm_str(alg));\n         return NULL;\n     }\n \ndiff --git a/crypto/pbkdf-gcrypt.c b/crypto/pbkdf-gcrypt.c\nindex 40289858bf..54ca0d9c75 100644\n--- a/crypto/pbkdf-gcrypt.c\n+++ b/crypto/pbkdf-gcrypt.c\n@@ -68,7 +68,7 @@ int qcrypto_pbkdf2(QCryptoHashAlgorithm hash,\n         hash_map[hash] == GCRY_MD_NONE) {\n         error_setg_errno(errp, ENOSYS,\n                          \"PBKDF does not support hash algorithm %s\",\n-                         QCryptoHashAlgorithm_lookup[hash]);\n+                         QCryptoHashAlgorithm_str(hash));\n         return -1;\n     }\n \ndiff --git a/crypto/pbkdf-nettle.c b/crypto/pbkdf-nettle.c\nindex 6fb2671656..212b3e816b 100644\n--- a/crypto/pbkdf-nettle.c\n+++ b/crypto/pbkdf-nettle.c\n@@ -110,7 +110,7 @@ int qcrypto_pbkdf2(QCryptoHashAlgorithm hash,\n     default:\n         error_setg_errno(errp, ENOSYS,\n                          \"PBKDF does not support hash algorithm %s\",\n-                         QCryptoHashAlgorithm_lookup[hash]);\n+                         QCryptoHashAlgorithm_str(hash));\n         return -1;\n     }\n     return 0;\ndiff --git a/hmp.c b/hmp.c\nindex 5d980acb1e..30819fe602 100644\n--- a/hmp.c\n+++ b/hmp.c\n@@ -106,7 +106,7 @@ void hmp_info_status(Monitor *mon, const QDict *qdict)\n                    info->singlestep ? \" (single step mode)\" : \"\");\n \n     if (!info->running && info->status != RUN_STATE_PAUSED) {\n-        monitor_printf(mon, \" (%s)\", RunState_lookup[info->status]);\n+        monitor_printf(mon, \" (%s)\", RunState_str(info->status));\n     }\n \n     monitor_printf(mon, \"\\n\");\n@@ -171,7 +171,7 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)\n         monitor_printf(mon, \"capabilities: \");\n         for (cap = caps; cap; cap = cap->next) {\n             monitor_printf(mon, \"%s: %s \",\n-                           MigrationCapability_lookup[cap->value->capability],\n+                           MigrationCapability_str(cap->value->capability),\n                            cap->value->state ? \"on\" : \"off\");\n         }\n         monitor_printf(mon, \"\\n\");\n@@ -179,7 +179,7 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)\n \n     if (info->has_status) {\n         monitor_printf(mon, \"Migration status: %s\",\n-                       MigrationStatus_lookup[info->status]);\n+                       MigrationStatus_str(info->status));\n         if (info->status == MIGRATION_STATUS_FAILED &&\n             info->has_error_desc) {\n             monitor_printf(mon, \" (%s)\\n\", info->error_desc);\n@@ -277,7 +277,7 @@ void hmp_info_migrate_capabilities(Monitor *mon, const QDict *qdict)\n     if (caps) {\n         for (cap = caps; cap; cap = cap->next) {\n             monitor_printf(mon, \"%s: %s\\n\",\n-                           MigrationCapability_lookup[cap->value->capability],\n+                           MigrationCapability_str(cap->value->capability),\n                            cap->value->state ? \"on\" : \"off\");\n         }\n     }\n@@ -294,48 +294,48 @@ void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict)\n     if (params) {\n         assert(params->has_compress_level);\n         monitor_printf(mon, \"%s: %\" PRId64 \"\\n\",\n-            MigrationParameter_lookup[MIGRATION_PARAMETER_COMPRESS_LEVEL],\n+            MigrationParameter_str(MIGRATION_PARAMETER_COMPRESS_LEVEL),\n             params->compress_level);\n         assert(params->has_compress_threads);\n         monitor_printf(mon, \"%s: %\" PRId64 \"\\n\",\n-            MigrationParameter_lookup[MIGRATION_PARAMETER_COMPRESS_THREADS],\n+            MigrationParameter_str(MIGRATION_PARAMETER_COMPRESS_THREADS),\n             params->compress_threads);\n         assert(params->has_decompress_threads);\n         monitor_printf(mon, \"%s: %\" PRId64 \"\\n\",\n-            MigrationParameter_lookup[MIGRATION_PARAMETER_DECOMPRESS_THREADS],\n+            MigrationParameter_str(MIGRATION_PARAMETER_DECOMPRESS_THREADS),\n             params->decompress_threads);\n         assert(params->has_cpu_throttle_initial);\n         monitor_printf(mon, \"%s: %\" PRId64 \"\\n\",\n-            MigrationParameter_lookup[MIGRATION_PARAMETER_CPU_THROTTLE_INITIAL],\n+            MigrationParameter_str(MIGRATION_PARAMETER_CPU_THROTTLE_INITIAL),\n             params->cpu_throttle_initial);\n         assert(params->has_cpu_throttle_increment);\n         monitor_printf(mon, \"%s: %\" PRId64 \"\\n\",\n-            MigrationParameter_lookup[MIGRATION_PARAMETER_CPU_THROTTLE_INCREMENT],\n+            MigrationParameter_str(MIGRATION_PARAMETER_CPU_THROTTLE_INCREMENT),\n             params->cpu_throttle_increment);\n         assert(params->has_tls_creds);\n         monitor_printf(mon, \"%s: '%s'\\n\",\n-            MigrationParameter_lookup[MIGRATION_PARAMETER_TLS_CREDS],\n+            MigrationParameter_str(MIGRATION_PARAMETER_TLS_CREDS),\n             params->tls_creds);\n         assert(params->has_tls_hostname);\n         monitor_printf(mon, \"%s: '%s'\\n\",\n-            MigrationParameter_lookup[MIGRATION_PARAMETER_TLS_HOSTNAME],\n+            MigrationParameter_str(MIGRATION_PARAMETER_TLS_HOSTNAME),\n             params->tls_hostname);\n         assert(params->has_max_bandwidth);\n         monitor_printf(mon, \"%s: %\" PRId64 \" bytes/second\\n\",\n-            MigrationParameter_lookup[MIGRATION_PARAMETER_MAX_BANDWIDTH],\n+            MigrationParameter_str(MIGRATION_PARAMETER_MAX_BANDWIDTH),\n             params->max_bandwidth);\n         assert(params->has_downtime_limit);\n         monitor_printf(mon, \"%s: %\" PRId64 \" milliseconds\\n\",\n-            MigrationParameter_lookup[MIGRATION_PARAMETER_DOWNTIME_LIMIT],\n+            MigrationParameter_str(MIGRATION_PARAMETER_DOWNTIME_LIMIT),\n             params->downtime_limit);\n         assert(params->has_x_checkpoint_delay);\n         monitor_printf(mon, \"%s: %\" PRId64 \"\\n\",\n-            MigrationParameter_lookup[MIGRATION_PARAMETER_X_CHECKPOINT_DELAY],\n+            MigrationParameter_str(MIGRATION_PARAMETER_X_CHECKPOINT_DELAY),\n             params->x_checkpoint_delay);\n         assert(params->has_block_incremental);\n         monitor_printf(mon, \"%s: %s\\n\",\n-            MigrationParameter_lookup[MIGRATION_PARAMETER_BLOCK_INCREMENTAL],\n-                       params->block_incremental ? \"on\" : \"off\");\n+            MigrationParameter_str(MIGRATION_PARAMETER_BLOCK_INCREMENTAL),\n+            params->block_incremental ? \"on\" : \"off\");\n     }\n \n     qapi_free_MigrationParameters(params);\n@@ -431,7 +431,7 @@ static void print_block_info(Monitor *mon, BlockInfo *info,\n         }\n         if (info->has_io_status && info->io_status != BLOCK_DEVICE_IO_STATUS_OK) {\n             monitor_printf(mon, \"    I/O status:       %s\\n\",\n-                           BlockDeviceIoStatus_lookup[info->io_status]);\n+                           BlockDeviceIoStatus_str(info->io_status));\n         }\n \n         if (info->removable) {\n@@ -461,7 +461,7 @@ static void print_block_info(Monitor *mon, BlockInfo *info,\n \n     if (inserted->detect_zeroes != BLOCKDEV_DETECT_ZEROES_OPTIONS_OFF) {\n         monitor_printf(mon, \"    Detect zeroes:    %s\\n\",\n-                       BlockdevDetectZeroesOptions_lookup[inserted->detect_zeroes]);\n+                BlockdevDetectZeroesOptions_str(inserted->detect_zeroes));\n     }\n \n     if (inserted->bps  || inserted->bps_rd  || inserted->bps_wr  ||\n@@ -612,7 +612,7 @@ static void hmp_info_VncBasicInfo(Monitor *mon, VncBasicInfo *info,\n                    name,\n                    info->host,\n                    info->service,\n-                   NetworkAddressFamily_lookup[info->family],\n+                   NetworkAddressFamily_str(info->family),\n                    info->websocket ? \" (Websocket)\" : \"\");\n }\n \n@@ -622,8 +622,8 @@ static void hmp_info_vnc_authcrypt(Monitor *mon, const char *indent,\n                                    VncVencryptSubAuth *vencrypt)\n {\n     monitor_printf(mon, \"%sAuth: %s (Sub: %s)\\n\", indent,\n-                   VncPrimaryAuth_lookup[auth],\n-                   vencrypt ? VncVencryptSubAuth_lookup[*vencrypt] : \"none\");\n+                   VncPrimaryAuth_str(auth),\n+                   vencrypt ? VncVencryptSubAuth_str(*vencrypt) : \"none\");\n }\n \n static void hmp_info_vnc_clients(Monitor *mon, VncClientInfoList *client)\n@@ -738,7 +738,7 @@ void hmp_info_spice(Monitor *mon, const QDict *qdict)\n     monitor_printf(mon, \"        auth: %s\\n\", info->auth);\n     monitor_printf(mon, \"    compiled: %s\\n\", info->compiled_version);\n     monitor_printf(mon, \"  mouse-mode: %s\\n\",\n-                   SpiceQueryMouseMode_lookup[info->mouse_mode]);\n+                   SpiceQueryMouseMode_str(info->mouse_mode));\n \n     if (!info->has_channels || info->channels == NULL) {\n         monitor_printf(mon, \"Channels: none\\n\");\n@@ -1009,10 +1009,10 @@ void hmp_info_tpm(Monitor *mon, const QDict *qdict)\n     for (info = info_list; info; info = info->next) {\n         TPMInfo *ti = info->value;\n         monitor_printf(mon, \" tpm%d: model=%s\\n\",\n-                       c, TpmModel_lookup[ti->model]);\n+                       c, TpmModel_str(ti->model));\n \n         monitor_printf(mon, \"  \\\\ %s: type=%s\",\n-                       ti->id, TpmTypeOptionsKind_lookup[ti->options->type]);\n+                       ti->id, TpmTypeOptionsKind_str(ti->options->type));\n \n         switch (ti->options->type) {\n         case TPM_TYPE_OPTIONS_KIND_PASSTHROUGH:\n@@ -2368,7 +2368,7 @@ void hmp_info_memdev(Monitor *mon, const QDict *qdict)\n         monitor_printf(mon, \"  prealloc: %s\\n\",\n                        m->value->prealloc ? \"true\" : \"false\");\n         monitor_printf(mon, \"  policy: %s\\n\",\n-                       HostMemPolicy_lookup[m->value->policy]);\n+                       HostMemPolicy_str(m->value->policy));\n         visit_complete(v, &str);\n         monitor_printf(mon, \"  host nodes: %s\\n\", str);\n \n@@ -2399,7 +2399,7 @@ void hmp_info_memory_devices(Monitor *mon, const QDict *qdict)\n                 di = value->u.dimm.data;\n \n                 monitor_printf(mon, \"Memory device [%s]: \\\"%s\\\"\\n\",\n-                               MemoryDeviceInfoKind_lookup[value->type],\n+                               MemoryDeviceInfoKind_str(value->type),\n                                di->id ? di->id : \"\");\n                 monitor_printf(mon, \"  addr: 0x%\" PRIx64 \"\\n\", di->addr);\n                 monitor_printf(mon, \"  slot: %\" PRId64 \"\\n\", di->slot);\n@@ -2793,7 +2793,7 @@ void hmp_info_dump(Monitor *mon, const QDict *qdict)\n     DumpQueryResult *result = qmp_query_dump(NULL);\n \n     assert(result && result->status < DUMP_STATUS__MAX);\n-    monitor_printf(mon, \"Status: %s\\n\", DumpStatus_lookup[result->status]);\n+    monitor_printf(mon, \"Status: %s\\n\", DumpStatus_str(result->status));\n \n     if (result->status == DUMP_STATUS_ACTIVE) {\n         float percent = 0;\ndiff --git a/hw/block/fdc.c b/hw/block/fdc.c\nindex 401129073b..db40e174c9 100644\n--- a/hw/block/fdc.c\n+++ b/hw/block/fdc.c\n@@ -392,9 +392,9 @@ static int pick_geometry(FDrive *drv)\n             FLOPPY_DPRINTF(\"User requested floppy drive type '%s', \"\n                            \"but inserted medium appears to be a \"\n                            \"%\"PRId64\" sector '%s' type\\n\",\n-                           FloppyDriveType_lookup[drv->drive],\n+                           FloppyDriveType_str(drv->drive),\n                            nb_sectors,\n-                           FloppyDriveType_lookup[parse->drive]);\n+                           FloppyDriveType_str(parse->drive));\n         }\n         match = type_match;\n     }\n@@ -403,7 +403,7 @@ static int pick_geometry(FDrive *drv)\n     if (match == -1) {\n         error_setg(&error_abort, \"No candidate geometries present in table \"\n                    \" for floppy drive type '%s'\",\n-                   FloppyDriveType_lookup[drv->drive]);\n+                   FloppyDriveType_str(drv->drive));\n     }\n \n     parse = &(fd_formats[match]);\ndiff --git a/hw/char/escc.c b/hw/char/escc.c\nindex 1aca564e33..3ab831a6a7 100644\n--- a/hw/char/escc.c\n+++ b/hw/char/escc.c\n@@ -848,7 +848,7 @@ static void sunkbd_handle_event(DeviceState *dev, QemuConsole *src,\n     assert(evt->type == INPUT_EVENT_KIND_KEY);\n     key = evt->u.key.data;\n     qcode = qemu_input_key_value_to_qcode(key->key);\n-    trace_escc_sunkbd_event_in(qcode, QKeyCode_lookup[qcode],\n+    trace_escc_sunkbd_event_in(qcode, QKeyCode_str(qcode),\n                                key->down);\n \n     if (qcode == Q_KEY_CODE_CAPS_LOCK) {\ndiff --git a/hw/input/virtio-input-hid.c b/hw/input/virtio-input-hid.c\nindex 46c038110c..4d3afc1b14 100644\n--- a/hw/input/virtio-input-hid.c\n+++ b/hw/input/virtio-input-hid.c\n@@ -209,7 +209,7 @@ static void virtio_input_handle_event(DeviceState *dev, QemuConsole *src,\n         } else {\n             if (key->down) {\n                 fprintf(stderr, \"%s: unmapped key: %d [%s]\\n\", __func__,\n-                        qcode, QKeyCode_lookup[qcode]);\n+                        qcode, QKeyCode_str(qcode));\n             }\n         }\n         break;\n@@ -224,7 +224,7 @@ static void virtio_input_handle_event(DeviceState *dev, QemuConsole *src,\n             if (btn->down) {\n                 fprintf(stderr, \"%s: unmapped button: %d [%s]\\n\", __func__,\n                         btn->button,\n-                        InputButton_lookup[btn->button]);\n+                        InputButton_str(btn->button));\n             }\n         }\n         break;\ndiff --git a/migration/colo-failover.c b/migration/colo-failover.c\nindex f9914869c5..6563862b36 100644\n--- a/migration/colo-failover.c\n+++ b/migration/colo-failover.c\n@@ -34,7 +34,7 @@ static void colo_failover_bh(void *opaque)\n                                    FAILOVER_STATUS_ACTIVE);\n     if (old_state != FAILOVER_STATUS_REQUIRE) {\n         error_report(\"Unknown error for failover, old_state = %s\",\n-                    FailoverStatus_lookup[old_state]);\n+                    FailoverStatus_str(old_state));\n         return;\n     }\n \n@@ -64,7 +64,7 @@ FailoverStatus failover_set_state(FailoverStatus old_state,\n \n     old = atomic_cmpxchg(&failover_state, old_state, new_state);\n     if (old == old_state) {\n-        trace_colo_failover_set_state(FailoverStatus_lookup[new_state]);\n+        trace_colo_failover_set_state(FailoverStatus_str(new_state));\n     }\n     return old;\n }\ndiff --git a/migration/colo.c b/migration/colo.c\nindex a4255432ac..dee3aa8bf7 100644\n--- a/migration/colo.c\n+++ b/migration/colo.c\n@@ -61,7 +61,7 @@ static void secondary_vm_do_failover(void)\n                         FAILOVER_STATUS_RELAUNCH);\n         if (old_state != FAILOVER_STATUS_ACTIVE) {\n             error_report(\"Unknown error while do failover for secondary VM,\"\n-                         \"old_state: %s\", FailoverStatus_lookup[old_state]);\n+                         \"old_state: %s\", FailoverStatus_str(old_state));\n         }\n         return;\n     }\n@@ -91,7 +91,7 @@ static void secondary_vm_do_failover(void)\n                                    FAILOVER_STATUS_COMPLETED);\n     if (old_state != FAILOVER_STATUS_ACTIVE) {\n         error_report(\"Incorrect state (%s) while doing failover for \"\n-                     \"secondary VM\", FailoverStatus_lookup[old_state]);\n+                     \"secondary VM\", FailoverStatus_str(old_state));\n         return;\n     }\n     /* Notify COLO incoming thread that failover work is finished */\n@@ -126,7 +126,7 @@ static void primary_vm_do_failover(void)\n                                    FAILOVER_STATUS_COMPLETED);\n     if (old_state != FAILOVER_STATUS_ACTIVE) {\n         error_report(\"Incorrect state (%s) while doing failover for Primary VM\",\n-                     FailoverStatus_lookup[old_state]);\n+                     FailoverStatus_str(old_state));\n         return;\n     }\n     /* Notify COLO thread that failover work is finished */\n@@ -222,7 +222,7 @@ static void colo_send_message(QEMUFile *f, COLOMessage msg,\n     if (ret < 0) {\n         error_setg_errno(errp, -ret, \"Can't send COLO message\");\n     }\n-    trace_colo_send_message(COLOMessage_lookup[msg]);\n+    trace_colo_send_message(COLOMessage_str(msg));\n }\n \n static void colo_send_message_value(QEMUFile *f, COLOMessage msg,\n@@ -242,7 +242,7 @@ static void colo_send_message_value(QEMUFile *f, COLOMessage msg,\n     ret = qemu_file_get_error(f);\n     if (ret < 0) {\n         error_setg_errno(errp, -ret, \"Failed to send value for message:%s\",\n-                         COLOMessage_lookup[msg]);\n+                         COLOMessage_str(msg));\n     }\n }\n \n@@ -261,7 +261,7 @@ static COLOMessage colo_receive_message(QEMUFile *f, Error **errp)\n         error_setg(errp, \"%s: Invalid message\", __func__);\n         return msg;\n     }\n-    trace_colo_receive_message(COLOMessage_lookup[msg]);\n+    trace_colo_receive_message(COLOMessage_str(msg));\n     return msg;\n }\n \n@@ -299,7 +299,7 @@ static uint64_t colo_receive_message_value(QEMUFile *f, uint32_t expect_msg,\n     ret = qemu_file_get_error(f);\n     if (ret < 0) {\n         error_setg_errno(errp, -ret, \"Failed to get value for COLO message: %s\",\n-                         COLOMessage_lookup[expect_msg]);\n+                         COLOMessage_str(expect_msg));\n     }\n     return value;\n }\ndiff --git a/migration/global_state.c b/migration/global_state.c\nindex 76cd3a13d4..8db2f19459 100644\n--- a/migration/global_state.c\n+++ b/migration/global_state.c\n@@ -41,7 +41,7 @@ int global_state_store(void)\n \n void global_state_store_running(void)\n {\n-    const char *state = RunState_lookup[RUN_STATE_RUNNING];\n+    const char *state = RunState_str(RUN_STATE_RUNNING);\n     strncpy((char *)global_state.runstate,\n            state, sizeof(global_state.runstate));\n }\ndiff --git a/monitor.c b/monitor.c\nindex 86438f4b75..9239f7adde 100644\n--- a/monitor.c\n+++ b/monitor.c\n@@ -928,7 +928,7 @@ EventInfoList *qmp_query_events(Error **errp)\n     QAPIEvent e;\n \n     for (e = 0 ; e < QAPI_EVENT__MAX ; e++) {\n-        const char *event_name = QAPIEvent_lookup[e];\n+        const char *event_name = QAPIEvent_str(e);\n         assert(event_name != NULL);\n         info = g_malloc0(sizeof(*info));\n         info->value = g_malloc0(sizeof(*info->value));\n@@ -3250,7 +3250,7 @@ void netdev_add_completion(ReadLineState *rs, int nb_args, const char *str)\n     len = strlen(str);\n     readline_set_completion_index(rs, len);\n     for (i = 0; i < NET_CLIENT_DRIVER__MAX; i++) {\n-        add_completion_option(rs, str, NetClientDriver_lookup[i]);\n+        add_completion_option(rs, str, NetClientDriver_str(i));\n     }\n }\n \n@@ -3434,8 +3434,8 @@ void sendkey_completion(ReadLineState *rs, int nb_args, const char *str)\n     len = strlen(str);\n     readline_set_completion_index(rs, len);\n     for (i = 0; i < Q_KEY_CODE__MAX; i++) {\n-        if (!strncmp(str, QKeyCode_lookup[i], len)) {\n-            readline_add_completion(rs, QKeyCode_lookup[i]);\n+        if (!strncmp(str, QKeyCode_str(i), len)) {\n+            readline_add_completion(rs, QKeyCode_str(i));\n         }\n     }\n }\n@@ -3538,7 +3538,7 @@ void watchdog_action_completion(ReadLineState *rs, int nb_args, const char *str)\n     }\n     readline_set_completion_index(rs, strlen(str));\n     for (i = 0; i < WATCHDOG_EXPIRATION_ACTION__MAX; i++) {\n-        add_completion_option(rs, str, WatchdogExpirationAction_lookup[i]);\n+        add_completion_option(rs, str, WatchdogExpirationAction_str(i));\n     }\n }\n \n@@ -3552,7 +3552,7 @@ void migrate_set_capability_completion(ReadLineState *rs, int nb_args,\n     if (nb_args == 2) {\n         int i;\n         for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {\n-            const char *name = MigrationCapability_lookup[i];\n+            const char *name = MigrationCapability_str(i);\n             if (!strncmp(str, name, len)) {\n                 readline_add_completion(rs, name);\n             }\n@@ -3573,7 +3573,7 @@ void migrate_set_parameter_completion(ReadLineState *rs, int nb_args,\n     if (nb_args == 2) {\n         int i;\n         for (i = 0; i < MIGRATION_PARAMETER__MAX; i++) {\n-            const char *name = MigrationParameter_lookup[i];\n+            const char *name = MigrationParameter_str(i);\n             if (!strncmp(str, name, len)) {\n                 readline_add_completion(rs, name);\n             }\n@@ -3852,7 +3852,7 @@ static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens)\n         qdict = qdict_get_qdict(qobject_to_qdict(rsp), \"error\");\n         if (qdict\n             && !g_strcmp0(qdict_get_try_str(qdict, \"class\"),\n-                    QapiErrorClass_lookup[ERROR_CLASS_COMMAND_NOT_FOUND])) {\n+                    QapiErrorClass_str(ERROR_CLASS_COMMAND_NOT_FOUND))) {\n             /* Provide a more useful error message */\n             qdict_del(qdict, \"desc\");\n             qdict_put_str(qdict, \"desc\", \"Expecting capabilities negotiation\"\ndiff --git a/net/net.c b/net/net.c\nindex 0e28099554..2fa99c0497 100644\n--- a/net/net.c\n+++ b/net/net.c\n@@ -1064,7 +1064,7 @@ static int net_client_init1(const void *object, bool is_netdev, Error **errp)\n         /* FIXME drop when all init functions store an Error */\n         if (errp && !*errp) {\n             error_setg(errp, QERR_DEVICE_INIT_FAILED,\n-                       NetClientDriver_lookup[netdev->type]);\n+                       NetClientDriver_str(netdev->type));\n         }\n         return -1;\n     }\n@@ -1288,7 +1288,7 @@ void print_net_client(Monitor *mon, NetClientState *nc)\n \n     monitor_printf(mon, \"%s: index=%d,type=%s,%s\\n\", nc->name,\n                    nc->queue_index,\n-                   NetClientDriver_lookup[nc->info->type],\n+                   NetClientDriver_str(nc->info->type),\n                    nc->info_str);\n     if (!QTAILQ_EMPTY(&nc->filters)) {\n         monitor_printf(mon, \"filters:\\n\");\ndiff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c\nindex 5ad36f8a09..b41fa174fe 100644\n--- a/qapi/qmp-dispatch.c\n+++ b/qapi/qmp-dispatch.c\n@@ -118,7 +118,7 @@ static QObject *do_qmp_dispatch(QmpCommandList *cmds, QObject *request,\n QObject *qmp_build_error_object(Error *err)\n {\n     return qobject_from_jsonf(\"{ 'class': %s, 'desc': %s }\",\n-                              QapiErrorClass_lookup[error_get_class(err)],\n+                              QapiErrorClass_str(error_get_class(err)),\n                               error_get_pretty(err));\n }\n \ndiff --git a/tests/test-qapi-util.c b/tests/test-qapi-util.c\nindex 7e1be1d851..0992bdb218 100644\n--- a/tests/test-qapi-util.c\n+++ b/tests/test-qapi-util.c\n@@ -31,7 +31,7 @@ static void test_qapi_enum_parse(void)\n     ret = qapi_enum_parse(QType_lookup, \"none\", -1, &error_abort);\n     g_assert_cmpint(ret, ==, QTYPE_NONE);\n \n-    ret = qapi_enum_parse(QType_lookup, QType_lookup[QTYPE__MAX - 1],\n+    ret = qapi_enum_parse(QType_lookup, QType_str(QTYPE__MAX - 1),\n                           QTYPE__MAX - 1, &error_abort);\n     g_assert_cmpint(ret, ==, QTYPE__MAX - 1);\n }\ndiff --git a/tests/test-qobject-input-visitor.c b/tests/test-qobject-input-visitor.c\nindex 5bbfb65a02..f8720aa5eb 100644\n--- a/tests/test-qobject-input-visitor.c\n+++ b/tests/test-qobject-input-visitor.c\n@@ -385,7 +385,7 @@ static void test_visitor_in_enum(TestInputVisitorData *data,\n     for (i = 0; i < ENUM_ONE__MAX; i++) {\n         EnumOne res = -1;\n \n-        v = visitor_input_test_init(data, \"%s\", EnumOne_lookup[i]);\n+        v = visitor_input_test_init(data, \"%s\", EnumOne_str(i));\n \n         visit_type_EnumOne(v, NULL, &res, &error_abort);\n         g_assert_cmpint(i, ==, res);\n@@ -699,7 +699,7 @@ static void test_native_list_integer_helper(TestInputVisitorData *data,\n         }\n     }\n     g_string_append_printf(gstr_union,  \"{ 'type': '%s', 'data': [ %s ] }\",\n-                           UserDefNativeListUnionKind_lookup[kind],\n+                           UserDefNativeListUnionKind_str(kind),\n                            gstr_list->str);\n     v = visitor_input_test_init_raw(data,  gstr_union->str);\n \ndiff --git a/tests/test-qobject-output-visitor.c b/tests/test-qobject-output-visitor.c\nindex 7eb162059c..d375100a52 100644\n--- a/tests/test-qobject-output-visitor.c\n+++ b/tests/test-qobject-output-visitor.c\n@@ -133,7 +133,7 @@ static void test_visitor_out_enum(TestOutputVisitorData *data,\n \n         qstr = qobject_to_qstring(visitor_get(data));\n         g_assert(qstr);\n-        g_assert_cmpstr(qstring_get_str(qstr), ==, EnumOne_lookup[i]);\n+        g_assert_cmpstr(qstring_get_str(qstr), ==, EnumOne_str(i));\n         visitor_reset(data);\n     }\n }\ndiff --git a/tests/test-string-input-visitor.c b/tests/test-string-input-visitor.c\nindex e7a7b80c92..4f9c36bef1 100644\n--- a/tests/test-string-input-visitor.c\n+++ b/tests/test-string-input-visitor.c\n@@ -282,7 +282,7 @@ static void test_visitor_in_enum(TestInputVisitorData *data,\n     for (i = 0; i < ENUM_ONE__MAX; i++) {\n         EnumOne res = -1;\n \n-        v = visitor_input_test_init(data, EnumOne_lookup[i]);\n+        v = visitor_input_test_init(data, EnumOne_str(i));\n \n         visit_type_EnumOne(v, NULL, &res, &err);\n         g_assert(!err);\ndiff --git a/tests/test-string-output-visitor.c b/tests/test-string-output-visitor.c\nindex e736db3af8..385cddb5d9 100644\n--- a/tests/test-string-output-visitor.c\n+++ b/tests/test-string-output-visitor.c\n@@ -194,12 +194,12 @@ static void test_visitor_out_enum(TestOutputVisitorData *data,\n \n         str = visitor_get(data);\n         if (data->human) {\n-            char *str_human = g_strdup_printf(\"\\\"%s\\\"\", EnumOne_lookup[i]);\n+            char *str_human = g_strdup_printf(\"\\\"%s\\\"\", EnumOne_str(i));\n \n             g_assert_cmpstr(str, ==, str_human);\n             g_free(str_human);\n         } else {\n-            g_assert_cmpstr(str, ==, EnumOne_lookup[i]);\n+            g_assert_cmpstr(str, ==, EnumOne_str(i));\n         }\n         visitor_reset(data);\n     }\ndiff --git a/tpm.c b/tpm.c\nindex 38f3eb827f..111f1ca63f 100644\n--- a/tpm.c\n+++ b/tpm.c\n@@ -62,7 +62,7 @@ static void tpm_display_backend_drivers(void)\n             continue;\n         }\n         fprintf(stderr, \"%12s   %s\\n\",\n-                TpmType_lookup[i], be_drivers[i]->desc());\n+                TpmType_str(i), be_drivers[i]->desc());\n     }\n     fprintf(stderr, \"\\n\");\n }\ndiff --git a/ui/input-legacy.c b/ui/input-legacy.c\nindex a5f1e829c3..6bc3525499 100644\n--- a/ui/input-legacy.c\n+++ b/ui/input-legacy.c\n@@ -62,8 +62,8 @@ int index_from_key(const char *key, size_t key_length)\n     int i;\n \n     for (i = 0; i < Q_KEY_CODE__MAX; i++) {\n-        if (!strncmp(key, QKeyCode_lookup[i], key_length) &&\n-            !QKeyCode_lookup[i][key_length]) {\n+        if (!strncmp(key, QKeyCode_str(i), key_length) &&\n+            !QKeyCode_str(i)[key_length]) {\n             break;\n         }\n     }\ndiff --git a/ui/input.c b/ui/input.c\nindex af05f06368..3422d4a8ef 100644\n--- a/ui/input.c\n+++ b/ui/input.c\n@@ -151,7 +151,7 @@ void qmp_input_send_event(bool has_device, const char *device,\n         if (!qemu_input_find_handler(1 << event->type, con)) {\n             error_setg(errp, \"Input handler not found for \"\n                              \"event type %s\",\n-                            InputEventKind_lookup[event->type]);\n+                            InputEventKind_str(event->type));\n             return;\n         }\n     }\n@@ -213,12 +213,12 @@ static void qemu_input_event_trace(QemuConsole *src, InputEvent *evt)\n         switch (key->key->type) {\n         case KEY_VALUE_KIND_NUMBER:\n             qcode = qemu_input_key_number_to_qcode(key->key->u.number.data);\n-            name = QKeyCode_lookup[qcode];\n+            name = QKeyCode_str(qcode);\n             trace_input_event_key_number(idx, key->key->u.number.data,\n                                          name, key->down);\n             break;\n         case KEY_VALUE_KIND_QCODE:\n-            name = QKeyCode_lookup[key->key->u.qcode.data];\n+            name = QKeyCode_str(key->key->u.qcode.data);\n             trace_input_event_key_qcode(idx, name, key->down);\n             break;\n         case KEY_VALUE_KIND__MAX:\n@@ -228,17 +228,17 @@ static void qemu_input_event_trace(QemuConsole *src, InputEvent *evt)\n         break;\n     case INPUT_EVENT_KIND_BTN:\n         btn = evt->u.btn.data;\n-        name = InputButton_lookup[btn->button];\n+        name = InputButton_str(btn->button);\n         trace_input_event_btn(idx, name, btn->down);\n         break;\n     case INPUT_EVENT_KIND_REL:\n         move = evt->u.rel.data;\n-        name = InputAxis_lookup[move->axis];\n+        name = InputAxis_str(move->axis);\n         trace_input_event_rel(idx, name, move->value);\n         break;\n     case INPUT_EVENT_KIND_ABS:\n         move = evt->u.abs.data;\n-        name = InputAxis_lookup[move->axis];\n+        name = InputAxis_str(move->axis);\n         trace_input_event_abs(idx, name, move->value);\n         break;\n     case INPUT_EVENT_KIND__MAX:\ndiff --git a/ui/vnc.c b/ui/vnc.c\nindex fd43f9b983..0b5dbc62e4 100644\n--- a/ui/vnc.c\n+++ b/ui/vnc.c\n@@ -131,7 +131,7 @@ static void vnc_init_basic_info(SocketAddress *addr,\n     case SOCKET_ADDRESS_TYPE_VSOCK:\n     case SOCKET_ADDRESS_TYPE_FD:\n         error_setg(errp, \"Unsupported socket address type %s\",\n-                   SocketAddressType_lookup[addr->type]);\n+                   SocketAddressType_str(addr->type));\n         break;\n     default:\n         abort();\n@@ -416,7 +416,7 @@ VncInfo *qmp_query_vnc(Error **errp)\n         case SOCKET_ADDRESS_TYPE_VSOCK:\n         case SOCKET_ADDRESS_TYPE_FD:\n             error_setg(errp, \"Unsupported socket address type %s\",\n-                       SocketAddressType_lookup[addr->type]);\n+                       SocketAddressType_str(addr->type));\n             goto out_error;\n         default:\n             abort();\n@@ -1839,7 +1839,7 @@ static void vnc_release_modifiers(VncState *vs)\n \n static const char *code2name(int keycode)\n {\n-    return QKeyCode_lookup[qemu_input_key_number_to_qcode(keycode)];\n+    return QKeyCode_str(qemu_input_key_number_to_qcode(keycode));\n }\n \n static void key_event(VncState *vs, int down, uint32_t sym)\ndiff --git a/vl.c b/vl.c\nindex 8e247cc2a2..0b45e1b6fa 100644\n--- a/vl.c\n+++ b/vl.c\n@@ -688,7 +688,7 @@ bool runstate_check(RunState state)\n \n bool runstate_store(char *str, size_t size)\n {\n-    const char *state = RunState_lookup[current_run_state];\n+    const char *state = RunState_str(current_run_state);\n     size_t len = strlen(state) + 1;\n \n     if (len > size) {\n@@ -721,8 +721,8 @@ void runstate_set(RunState new_state)\n \n     if (!runstate_valid_transitions[current_run_state][new_state]) {\n         error_report(\"invalid runstate transition: '%s' -> '%s'\",\n-                     RunState_lookup[current_run_state],\n-                     RunState_lookup[new_state]);\n+                     RunState_str(current_run_state),\n+                     RunState_str(new_state));\n         abort();\n     }\n     trace_runstate_set(new_state);\n",
    "prefixes": [
        "PULL",
        "v2",
        "44/47"
    ]
}