]> 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 1c9db86c63acb8ad030cee769cdf78ca69da5dda..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 */
@@ -32,7 +33,7 @@ static int allocs;
 static void sstringstats(int hooknum, void *arg);
 static void salloc(void);
 
-#ifndef USE_VALGRIND
+#ifndef SSTRING_MMAP
 
 #define sunprotect(x)
 #define sunprotectb(x)
@@ -59,7 +60,7 @@ static void *mblock_head;
 #define MAP_ANON MAP_ANONYMOUS
 #endif
 
-#endif /* USE_VALGRIND */
+#endif /* SSTRING_MMAP */
 
 void initsstring() {
   int i;
@@ -80,37 +81,41 @@ void initsstring() {
   registerhook(HOOK_CORE_STATSREQUEST,&sstringstats);
 }
 
-#ifndef USE_VALGRIND
 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;
 }
-#endif /* USE_VALGRIND */
+#endif /* SSTRING_MMAP */
 
 sstring *findsstring(const char *str) {
   unsigned int hash=crc32(str)%SSTRING_HASHSIZE;
   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) {
@@ -118,7 +123,7 @@ void sstring_dehash(sstring *ss) {
       if (!ssp) {
         sshash[hash]=ss->next;
       } else {
-#ifndef USE_VALGRIND
+#ifndef SSTRING_MMAP
         ssp->next=ss->next;
 #else
         if (ssp->block!=ss->block) {
@@ -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) {
@@ -205,7 +210,7 @@ sstring *getsstring(const char *inputstr, int maxlen) {
       if (ssmemfree>sizeof(sstring)) {
         retval=(sstring *)ssmem;
         sunprotectb(mblock);
-#ifdef USE_VALGRIND
+#ifdef SSTRING_MMAP
         retval->block=mblock;
 #endif
         retval->alloc=(ssmemfree-sizeof(sstring));
@@ -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 USE_VALGRIND 
+
+#ifdef SSTRING_MMAP 
   if(!foreignblock)
     retval->block = mblock;
 #endif
 
   sstring_enhash(retval);
+
+#ifdef SSTRING_COMPAT
+  retval->content = retval->__content;
+#endif
+
   sprotect(retval);
 
   return retval;    
@@ -300,14 +310,7 @@ void sstringstats(int hooknum, void *arg) {
   }
 }
 
-int sstringcompare(sstring *ss1, sstring *ss2) {
-  if (ss1->length != ss2->length)
-    return -1;
-  
-  return strncmp(ss1->content, ss2->content, ss1->length);
-}
-
-#ifdef USE_VALGRIND
+#ifdef SSTRING_MMAP
 void finisstring() {
   struct mblock_list *c, *n;
   for (c=mblock_head;c;c=n) {
@@ -328,4 +331,4 @@ static void salloc(void) {
   ssmem=(char *)mblock + sizeof(struct mblock_list);
   ssmemfree=SSTRING_ALLOC-sizeof(struct mblock_list);
 }
-#endif /* USE_VALGRIND */
+#endif /* SSTRING_MMAP */