-void CtdlRegisterSearchFuncHook(Array (*fcn_ptr)(const char *), char *name) {
- SearchFunctionHook *newfcn;
-
- if (!name || !fcn_ptr) {
- return;
- }
-
- newfcn = (SearchFunctionHook *) malloc(sizeof(SearchFunctionHook));
- newfcn->next = SearchFunctionHookTable;
- newfcn->name = name;
- newfcn->fcn_ptr = fcn_ptr;
- SearchFunctionHookTable = newfcn;
-
- syslog(LOG_DEBUG, "extensions: registered a new search function (%s)", name);
-}
-
-
-void CtdlUnregisterSearchFuncHook(void (*fcn_ptr)(int *, long **, const char *), char *name) {
- SearchFunctionHook *cur, *p, *last;
-
- last = NULL;
- cur = SearchFunctionHookTable;
- while (cur != NULL) {
- if (fcn_ptr &&
- (cur->fcn_ptr == fcn_ptr) &&
- name && !strcmp(name, cur->name))
- {
- syslog(LOG_DEBUG, "extensions: unregistered search function(%s)", name);
- p = cur->next;
- free (cur);
- if (last != NULL)
- last->next = p;
- else
- SearchFunctionHookTable = p;
- cur = p;
- }
- else {
- last = cur;
- cur = cur->next;
- }
- }
-}
-
-
-void CtdlModuleDoSearch(int *num_msgs, long **search_msgs, const char *search_string, const char *func_name) {
- SearchFunctionHook *fcn = NULL;
-
- for (fcn = SearchFunctionHookTable; fcn != NULL; fcn = fcn->next) {
- if (!func_name || !strcmp(func_name, fcn->name)) {
- (*fcn->fcn_ptr) (num_msgs, search_msgs, search_string);
- return;
- }
- }
- *num_msgs = 0;
-}
-
-