X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=crypt-mod.c;fp=crypt-mod.c;h=356e3e9c03c1dec7c2154ee95d5a472e5d569c61;hp=0000000000000000000000000000000000000000;hb=3d937534e7b1ee723f86594b5e4c64c95158a933;hpb=d7c69d8f0180e24b9ee48088d08090df7b4e27c2 diff --git a/crypt-mod.c b/crypt-mod.c new file mode 100644 index 0000000..356e3e9 --- /dev/null +++ b/crypt-mod.c @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2004 g10 Code GmbH + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + */ + +#include "crypt-mod.h" + +/* A type an a variable to keep track of registered crypto modules. */ +typedef struct crypt_module *crypt_module_t; + +struct crypt_module +{ + crypt_module_specs_t specs; + crypt_module_t next, *prevp; +}; + +static crypt_module_t modules; + +/* Register a new crypto module. */ +void crypto_module_register (crypt_module_specs_t specs) +{ + crypt_module_t module_new = safe_malloc (sizeof (*module_new)); + + module_new->specs = specs; + module_new->next = modules; + if (modules) + modules->prevp = &module_new->next; + modules = module_new; +} + +/* Return the crypto module specs for IDENTIFIER. This function is + usually used via the CRYPT_MOD_CALL[_CHECK] macros. */ +crypt_module_specs_t crypto_module_lookup (int identifier) +{ + crypt_module_t module = modules; + + while (module && (module->specs->identifier != identifier)) + module = module->next; + + return module ? module->specs : NULL; +}