]> jfr.im git - irc/quakenet/newserv.git/blobdiff - lib/sstring-new.c
gline playground
[irc/quakenet/newserv.git] / lib / sstring-new.c
index d8f70208beba3cbc2ab22471f12bd300cb537064..afaa9e7c3c1d78dfc016dec26923e2d21cb4bbf3 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"
@@ -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,7 +81,7 @@ void initsstring() {
   registerhook(HOOK_CORE_STATSREQUEST,&sstringstats);
 }
 
-#ifndef USE_VALGRIND
+#ifndef SSTRING_MMAP
 void finisstring() {
   nsfreeall(POOL_SSTRING);
 }
@@ -89,28 +90,28 @@ 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 +119,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) {
@@ -128,13 +129,13 @@ void sstring_dehash(sstring *ss) {
         } else {
           ssp->next=ss->next;
         }
-      }
 #endif
+      }
       return;
     }
   }
   
-  Error("sstring",ERR_WARNING,"sstring_dehash(): Unable to find string (ref=%d, 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 +206,9 @@ sstring *getsstring(const char *inputstr, int maxlen) {
       if (ssmemfree>sizeof(sstring)) {
         retval=(sstring *)ssmem;
         sunprotectb(mblock);
+#ifdef SSTRING_MMAP
         retval->block=mblock;
+#endif
         retval->alloc=(ssmemfree-sizeof(sstring));
         retval->refcount=0;
         freesstring(retval);
@@ -237,15 +240,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;    
@@ -298,14 +306,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) {
@@ -326,4 +327,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 */