/* * symbolmatrix.C: Module symbol management. * Rights to this code are documented in doc/pod/license.pod. * * Copyright © 2005-2007 Atheme Project (http://www.atheme.org) */ static char const rcsid[] = "$Id: symbolmatrix.C,v 1.4 2007/08/28 17:12:24 pippijn dead $"; #include "atheme.h" void * module_symbol_get (module_t *mod, module_symbol_t * sym) { return_val_if_fail (mod != NULL, NULL); return_val_if_fail (sym != NULL, NULL); return_val_if_fail (sym->sym != NULL, NULL); /* XXX sym->mod->header->name is wrong. :( */ sym->mod = mod; sym->addr = module_locate_symbol (sym->mod->header->name, sym->sym); return sym->addr; } int module_symbol_getn (module_symbol_source_t * map, size_t n) { int i; return_val_if_fail (map != NULL, -1); return_val_if_fail (n > 0, -1); for (i = 0; i < n; i++) { module_t *m = module_find_published (map[i].mod); map[i].sym.sym = map[i].symn; /* handle failed lookups. */ if (module_symbol_get (m, &map[i].sym) == NULL) i--; } return i; }