#include "hash.h"
#include "cache.h"
#include "sprintf_irc.h"
+#include "irc_dictionary.h"
static BlockHeap *cachefile_heap = NULL;
static BlockHeap *cacheline_heap = NULL;
struct cachefile *user_motd = NULL;
struct cachefile *oper_motd = NULL;
-dlink_list links_cache_list;
char user_motd_changed[MAX_DATE_STRING];
+struct Dictionary *help_dict = NULL;
+
/* init_cache()
*
* inputs -
user_motd = cache_file(MPATH, "ircd.motd", 0);
oper_motd = cache_file(OPATH, "opers.motd", 0);
- memset(&links_cache_list, 0, sizeof(links_cache_list));
+
+ help_dict = irc_dictionary_create(strcasecmp);
}
/* cache_file()
return cacheptr;
}
-void
-cache_links(void *unused)
-{
- struct Client *target_p;
- dlink_node *ptr;
- dlink_node *next_ptr;
- char *links_line;
-
- DLINK_FOREACH_SAFE(ptr, next_ptr, links_cache_list.head)
- {
- MyFree(ptr->data);
- free_dlink_node(ptr);
- }
-
- links_cache_list.head = links_cache_list.tail = NULL;
- links_cache_list.length = 0;
-
- DLINK_FOREACH(ptr, global_serv_list.head)
- {
- target_p = ptr->data;
-
- /* skip ourselves (done in /links) and hidden servers */
- if(IsMe(target_p) ||
- (IsHidden(target_p) && !ConfigServerHide.disable_hidden))
- continue;
-
- /* if the below is ever modified, change LINKSLINELEN */
- links_line = MyMalloc(LINKSLINELEN);
- ircsnprintf(links_line, LINKSLINELEN, "%s %s :1 %s",
- target_p->name, me.name,
- target_p->info[0] ? target_p->info :
- "(Unknown Location)");
-
- dlinkAddTailAlloc(links_line, &links_cache_list);
- }
-}
-
/* free_cachefile()
*
* inputs - cachefile to free
*
* inputs -
* outputs -
- * side effects - contents of help directories are loaded.
+ * side effects - old help cache deleted
+ * - contents of help directories are loaded.
*/
void
load_help(void)
struct dirent *ldirent= NULL;
char filename[MAXPATHLEN];
struct cachefile *cacheptr;
+ struct DictionaryIter iter;
#if defined(S_ISLNK) && defined(HAVE_LSTAT)
struct stat sb;
#endif
+ DICTIONARY_FOREACH(cacheptr, &iter, help_dict)
+ {
+ irc_dictionary_delete(help_dict, cacheptr->name);
+ free_cachefile(cacheptr);
+ }
+
/* opers must be done first */
helpfile_dir = opendir(HPATH);
{
ircsnprintf(filename, sizeof(filename), "%s/%s", HPATH, ldirent->d_name);
cacheptr = cache_file(filename, ldirent->d_name, HELP_OPER);
- add_to_help_hash(cacheptr->name, cacheptr);
+ irc_dictionary_add(help_dict, cacheptr->name, cacheptr);
}
closedir(helpfile_dir);
*/
if(S_ISLNK(sb.st_mode))
{
- cacheptr = hash_find_help(ldirent->d_name, HELP_OPER);
+ cacheptr = irc_dictionary_retrieve(help_dict, ldirent->d_name);
- if(cacheptr != NULL)
+ if(cacheptr != NULL && cacheptr->flags & HELP_OPER) /* is this really needed? --nenolod */
{
cacheptr->flags |= HELP_USER;
continue;
#endif
cacheptr = cache_file(filename, ldirent->d_name, HELP_USER);
- add_to_help_hash(cacheptr->name, cacheptr);
+ irc_dictionary_add(help_dict, cacheptr->name, cacheptr);
}
closedir(helpfile_dir);