From: Jani Nikula <jani@nikula.org> Make it trivial to add handlers for new protocols without duplicating code. No functional changes. --- crypto.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/crypto.c b/crypto.c index 1187ad7..f415abd 100644 --- a/crypto.c +++ b/crypto.c @@ -49,6 +49,7 @@ notmuch_crypto_context_t * notmuch_crypto_get_context (notmuch_crypto_t *crypto, const char *protocol) { notmuch_crypto_context_t *cryptoctx = NULL; + size_t i; if (! protocol) { fprintf (stderr, "Cryptographic protocol is empty.\n"); @@ -61,14 +62,14 @@ notmuch_crypto_get_context (notmuch_crypto_t *crypto, const char *protocol) * parameter names as defined in this document are * case-insensitive." Thus, we use strcasecmp for the protocol. */ - if (strcasecmp (protocol, "application/pgp-signature") == 0 || - strcasecmp (protocol, "application/pgp-encrypted") == 0) { - cryptoctx = create_gpg_context (crypto); - } else { - fprintf (stderr, "Unknown or unsupported cryptographic protocol.\n"); + for (i = 0; i < ARRAY_SIZE (protocols); i++) { + if (strcasecmp (protocol, protocols[i].protocol) == 0) + return protocols[i].get_context (crypto); } - return cryptoctx; + fprintf (stderr, "Unknown or unsupported cryptographic protocol.\n"); + + return NULL; } int -- 2.5.0