]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/cache.c
Remove silly a2client_p, entirely pointless since User.server removal.
[irc/rqf/shadowircd.git] / src / cache.c
index c55364a7a1321c52bf09d9599426790b862d4095..2ca0bbf9ab849a82157abf73064334641e291207 100644 (file)
@@ -44,6 +44,7 @@
 #include "hash.h"
 #include "cache.h"
 #include "sprintf_irc.h"
+#include "irc_dictionary.h"
 
 static BlockHeap *cachefile_heap = NULL;
 static BlockHeap *cacheline_heap = NULL;
@@ -52,6 +53,8 @@ struct cachefile *user_motd = NULL;
 struct cachefile *oper_motd = NULL;
 char user_motd_changed[MAX_DATE_STRING];
 
+struct Dictionary *help_dict = NULL;
+
 /* init_cache()
  *
  * inputs      -
@@ -68,6 +71,8 @@ init_cache(void)
 
        user_motd = cache_file(MPATH, "ircd.motd", 0);
        oper_motd = cache_file(OPATH, "opers.motd", 0);
+
+       help_dict = irc_dictionary_create(strcasecmp);
 }
 
 /* cache_file()
@@ -156,7 +161,8 @@ free_cachefile(struct cachefile *cacheptr)
  *
  * 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)
@@ -165,11 +171,18 @@ 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);
 
@@ -180,7 +193,7 @@ load_help(void)
        {
                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);
@@ -202,9 +215,9 @@ load_help(void)
                 */
                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;
@@ -213,7 +226,7 @@ load_help(void)
 #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);