]> jfr.im git - irc/quakenet/newserv.git/blobdiff - lib/sstring-new.c
LUA: add kill queue
[irc/quakenet/newserv.git] / lib / sstring-new.c
index c20deca24d4c7f38390051d4ea116d4985cbfcea..90581f93af0b93ae2c0cea65d9e5637b26424f8b 100644 (file)
@@ -1,6 +1,7 @@
 /* sstring.h - Declaration of "static strings" functions */
 
 #define COMPILING_SSTRING
+#define SSTRING_NEW
 #include "sstring.h"
 
 #include "../core/hooks.h"
@@ -12,7 +13,7 @@
 
 #include <assert.h>
 #include <stdlib.h>
-#define __USE_GNU
+#define _GNU_SOURCE
 #include <string.h>
 
 /* List of free stuff */
@@ -80,11 +81,15 @@ void initsstring() {
   registerhook(HOOK_CORE_STATSREQUEST,&sstringstats);
 }
 
-#ifndef SSTRING_MMAP
 void finisstring() {
+  deregisterhook(HOOK_CORE_STATSREQUEST,&sstringstats);
+
+  #ifndef SSTRING_MMAP
   nsfreeall(POOL_SSTRING);
+  #endif /* SSTRING_MMAP */ 
 }
 
+#ifndef SSTRING_MMAP
 static void salloc(void) {
   ssmem=(char *)nsmalloc(POOL_SSTRING, SSTRING_ALLOC);
   ssmemfree=SSTRING_ALLOC;
@@ -96,21 +101,21 @@ sstring *findsstring(const char *str) {
   sstring *ss;
   
   for (ss=sshash[hash];ss;ss=ss->next)
-    if (!strcmp(str, ss->content))
+    if (!strcmp(str, sstring_content(ss)))
       return ss;
   
   return NULL;
 }
 
 void sstring_enhash(sstring *ss) {
-  unsigned int hash=crc32(ss->content)%SSTRING_HASHSIZE;
+  unsigned int hash=crc32(sstring_content(ss))%SSTRING_HASHSIZE;
   
   ss->next=sshash[hash];
   sshash[hash]=ss;
 }
 
 void sstring_dehash(sstring *ss) {
-  unsigned int hash=crc32(ss->content)%SSTRING_HASHSIZE;
+  unsigned int hash=crc32(sstring_content(ss))%SSTRING_HASHSIZE;
   sstring *ssh, *ssp;
   
   for (ssh=sshash[hash],ssp=NULL; ssh; ssp=ssh,ssh=ssh->next) {
@@ -134,7 +139,7 @@ void sstring_dehash(sstring *ss) {
     }
   }
   
-  Error("sstring",ERR_WARNING,"sstring_dehash(): Unable to find string (ref=%lu, length=%d) in hash: %s",ss->refcount,ss->length,ss->content);
+  Error("sstring",ERR_WARNING,"sstring_dehash(): Unable to find string (ref=%lu, length=%d) in hash: %s",ss->refcount,ss->length,sstring_content(ss));
 }
 
 sstring *getsstring(const char *inputstr, int maxlen) {
@@ -239,15 +244,20 @@ sstring *getsstring(const char *inputstr, int maxlen) {
    */
   
   retval->length=(length-1);
-  strcpy(retval->content,strbuf);
+  strcpy(sstring_content(retval),strbuf);
   retval->refcount=1;
-  
+
 #ifdef SSTRING_MMAP 
   if(!foreignblock)
     retval->block = mblock;
 #endif
 
   sstring_enhash(retval);
+
+#ifdef SSTRING_COMPAT
+  retval->content = retval->__content;
+#endif
+
   sprotect(retval);
 
   return retval;