]> jfr.im git - irc/quakenet/newserv.git/blobdiff - core/modules.c
Fix a few memory leaks and some naughty things, also track sstrings.
[irc/quakenet/newserv.git] / core / modules.c
index 688285a480a594fd8c8d060bace4b0476ffe99e3..1a35ae087d12a33b1b8467c04c6faa750d4aa6a5 100644 (file)
@@ -11,6 +11,7 @@
 #include "../lib/sstring.h"
 #include "../lib/irc_string.h"
 #include "../lib/splitline.h"
+#include "../lib/strlfunc.h"
 #include "config.h"
 #include "error.h"
 #include <stdio.h>
@@ -70,6 +71,7 @@ void clearmoduledeps() {
   unsigned int i;
   
   for (i=0;i<knownmodules;i++) {
+    freesstring(moduledeps[i].name);
     if (moduledeps[i].parents) {
       free(moduledeps[i].parents);
       moduledeps[i].parents=NULL;
@@ -447,12 +449,23 @@ void safereload(char *themodule) {
 
 void newserv_shutdown() {
   module *mods;
-  
+  char buf[1024];
+
   while (modules.cursi) {
     mods=(module *)(modules.content);
-    rmmod(mods[0].name->content);
+
+    strlcpy(buf, mods[0].name->content, sizeof(buf));
+    rmmod(buf);
   }
   
+  clearmoduledeps();
+
+  if (moddir!=NULL)
+    freesstring(moddir);
+
+  if (modsuffix!=NULL)
+    freesstring(modsuffix);
+
   Error("core",ERR_INFO,"All modules removed.  Exiting.");
 }