diff --git a/src/block_alloc_h.h b/src/block_alloc_h.h
index 167e74f2bad990c62bd2f32988b459ac54d1c836..dfe20632d20f259d3302d9263613bb67532faca3 100644
--- a/src/block_alloc_h.h
+++ b/src/block_alloc_h.h
@@ -22,7 +22,7 @@
 
 #define BLOCK_ALLOC(DATA,SIZE)						\
 struct DATA *PIKE_CONCAT(alloc_,DATA)(void);				\
-PMOD_EXPORT void PIKE_CONCAT3(new_,DATA,_context)(void);				\
+void PIKE_CONCAT3(new_,DATA,_context)(void);				\
 PMOD_EXPORT void PIKE_CONCAT(really_free_,DATA)(struct DATA *d);			\
 void PIKE_CONCAT3(free_all_,DATA,_blocks)(void);			\
 void PIKE_CONCAT3(count_memory_in_,DATA,s)(size_t *num, size_t *size);	\
diff --git a/src/pike_memory.c b/src/pike_memory.c
index f72567fb3d329eef6ba170b623942800f070d2bf..f0623805dfe79a1af0a05838b51d8ab21de3785d 100644
--- a/src/pike_memory.c
+++ b/src/pike_memory.c
@@ -71,7 +71,7 @@ p_wchar2 *MEMCHR2(p_wchar2 *p, p_wchar2 c, ptrdiff_t e)
   return (p_wchar2 *)NULL;
 }
 
-void swap(char *a, char *b, size_t size)
+static void swap(char *a, char *b, size_t size)
 {
   size_t tmp;
   char tmpbuf[1024];
@@ -232,7 +232,7 @@ size_t hashstr(const unsigned char *str, ptrdiff_t maxn)
 MK_HASHMEM(simple_hashmem, unsigned char)
 MK_HASHMEM(simple_hashmem1, p_wchar1)
 MK_HASHMEM(simple_hashmem2, p_wchar2)
-
+#if 0
 void memfill(char *to,
 	     INT32 tolen,
 	     char *from,
@@ -269,6 +269,7 @@ void memfill(char *to,
     }
   }
 }
+#endif
 
 #if 0
 #if defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) && defined(RLIMIT_DATA)
@@ -704,7 +705,7 @@ PMOD_EXPORT void mexec_free(void *ptr)
   verify_mexec_hdr(hdr);
 }
 
-PMOD_EXPORT void *mexec_alloc(size_t sz)
+void *mexec_alloc(size_t sz)
 {
   struct mexec_hdr *hdr;
   struct mexec_block *res;
@@ -747,7 +748,7 @@ PMOD_EXPORT void *mexec_alloc(size_t sz)
   return res + 1;
 }
 
-PMOD_EXPORT void *mexec_realloc(void *ptr, size_t sz)
+void *mexec_realloc(void *ptr, size_t sz)
 {
   struct mexec_hdr *hdr;
   struct mexec_hdr *old_hdr = NULL;
@@ -863,7 +864,7 @@ PMOD_EXPORT void *mexec_realloc(void *ptr, size_t sz)
 
 #elif defined (VALGRIND_DISCARD_TRANSLATIONS)
 
-PMOD_EXPORT void *mexec_alloc (size_t sz)
+void *mexec_alloc (size_t sz)
 {
   size_t *blk = malloc (sz + sizeof (size_t));
   if (!blk) return NULL;
@@ -871,7 +872,7 @@ PMOD_EXPORT void *mexec_alloc (size_t sz)
   return blk + 1;
 }
 
-PMOD_EXPORT void *mexec_realloc (void *ptr, size_t sz)
+void *mexec_realloc (void *ptr, size_t sz)
 {
   if (ptr) {
     size_t *oldblk = ptr;
@@ -888,7 +889,7 @@ PMOD_EXPORT void *mexec_realloc (void *ptr, size_t sz)
   return mexec_malloc (sz);
 }
 
-PMOD_EXPORT void mexec_free (void *ptr)
+void mexec_free (void *ptr)
 {
   size_t *blk = ptr;
   VALGRIND_DISCARD_TRANSLATIONS (blk, blk[-1]);
@@ -897,16 +898,16 @@ PMOD_EXPORT void mexec_free (void *ptr)
 
 #else  /* !USE_MY_MEXEC_ALLOC && !VALGRIND_DISCARD_TRANSLATIONS */
 
-PMOD_EXPORT void *mexec_alloc(size_t sz)
+void *mexec_alloc(size_t sz)
 {
   return malloc(sz);
 }
-PMOD_EXPORT void *mexec_realloc(void *ptr, size_t sz)
+void *mexec_realloc(void *ptr, size_t sz)
 {
   if (ptr) return realloc(ptr, sz);
   return malloc(sz);
 }
-PMOD_EXPORT void mexec_free(void *ptr)
+void mexec_free(void *ptr)
 {
   free(ptr);
 }
diff --git a/src/pike_memory.h b/src/pike_memory.h
index 42f12ef0d314d1c36ed46c1ed685875b501df4cc..a73ceeda5725d5d1445b663b4d5aa58c19a0430a 100644
--- a/src/pike_memory.h
+++ b/src/pike_memory.h
@@ -136,37 +136,40 @@ struct mem_searcher
 #include "pike_search.h"
 
 #include "block_alloc_h.h"
-#define MEMCHR0 MEMCHR
-
 extern int page_size;
 
 /* Note to self: Prototypes must be updated manually /Hubbe */
-PMOD_EXPORT ptrdiff_t pcharp_memcmp(PCHARP a, PCHARP b, int sz);
-PMOD_EXPORT long pcharp_strlen(PCHARP a);
-PMOD_EXPORT p_wchar1 *MEMCHR1(p_wchar1 *p, p_wchar2 c, ptrdiff_t e);
-PMOD_EXPORT p_wchar2 *MEMCHR2(p_wchar2 *p, p_wchar2 c, ptrdiff_t e);
-PMOD_EXPORT void swap(char *a, char *b, size_t size);
+PMOD_EXPORT ptrdiff_t pcharp_memcmp(PCHARP a, PCHARP b, int sz) ATTRIBUTE((pure));
+PMOD_EXPORT long pcharp_strlen(PCHARP a)  ATTRIBUTE((pure));
+
+#define MEMCHR0 MEMCHR
+p_wchar1 *MEMCHR1(p_wchar1 *p, p_wchar2 c, ptrdiff_t e)  ATTRIBUTE((pure));
+p_wchar2 *MEMCHR2(p_wchar2 *p, p_wchar2 c, ptrdiff_t e)  ATTRIBUTE((pure));
+
+/* PMOD_EXPORT void swap(char *a, char *b, size_t size); */
 PMOD_EXPORT void reverse(char *memory, size_t nitems, size_t size);
 PMOD_EXPORT void reorder(char *memory, INT32 nitems, INT32 size,INT32 *order);
-PMOD_EXPORT size_t hashmem(const unsigned char *a, size_t len, size_t mlen);
-PMOD_EXPORT size_t hashstr(const unsigned char *str, ptrdiff_t maxn);
-PMOD_EXPORT size_t simple_hashmem(const unsigned char *str, ptrdiff_t len, ptrdiff_t maxn);
-PMOD_EXPORT size_t simple_hashmem1(const p_wchar1 *str, ptrdiff_t len, ptrdiff_t maxn);
-PMOD_EXPORT size_t simple_hashmem2(const p_wchar2 *str, ptrdiff_t len, ptrdiff_t maxn);
+PMOD_EXPORT size_t hashmem(const unsigned char *a, size_t len, size_t mlen)  ATTRIBUTE((pure));
+PMOD_EXPORT size_t hashstr(const unsigned char *str, ptrdiff_t maxn)  ATTRIBUTE((pure));
+PMOD_EXPORT size_t simple_hashmem(const unsigned char *str, ptrdiff_t len, ptrdiff_t maxn)  ATTRIBUTE((pure));
+PMOD_EXPORT size_t simple_hashmem1(const p_wchar1 *str, ptrdiff_t len, ptrdiff_t maxn)  ATTRIBUTE((pure));
+PMOD_EXPORT size_t simple_hashmem2(const p_wchar2 *str, ptrdiff_t len, ptrdiff_t maxn)  ATTRIBUTE((pure));
+/*
 PMOD_EXPORT void memfill(char *to,
 	     INT32 tolen,
 	     char *from,
 	     INT32 fromlen,
 	     INT32 offset);
-PMOD_EXPORT void *debug_xalloc(size_t size);
-PMOD_EXPORT void *debug_xmalloc(size_t s);
+*/
+PMOD_EXPORT void *debug_xalloc(size_t size)  ATTRIBUTE((malloc)) ATTRIBUTE((alloc_size(1))) ATTRIBUTE((warn_unused_result));
+PMOD_EXPORT void *debug_xmalloc(size_t s)  ATTRIBUTE((malloc))  ATTRIBUTE((alloc_size(1))) ATTRIBUTE((warn_unused_result));
 PMOD_EXPORT void debug_xfree(void *mem);
-PMOD_EXPORT void *debug_xrealloc(void *m, size_t s);
-PMOD_EXPORT void *debug_xcalloc(size_t n, size_t s);
+PMOD_EXPORT void *debug_xrealloc(void *m, size_t s)   ATTRIBUTE((malloc)) ATTRIBUTE((alloc_size(2))) ATTRIBUTE((warn_unused_result));
+PMOD_EXPORT void *debug_xcalloc(size_t n, size_t s)  ATTRIBUTE((malloc))  ATTRIBUTE((alloc_size(1,2))) ATTRIBUTE((warn_unused_result));
 
-PMOD_EXPORT void *mexec_alloc(size_t sz);
-PMOD_EXPORT void *mexec_realloc(void *ptr, size_t sz);
-PMOD_EXPORT void mexec_free(void *ptr);
+void *mexec_alloc(size_t sz) ATTRIBUTE((malloc)) ATTRIBUTE((alloc_size(1))) ATTRIBUTE((warn_unused_result));
+void *mexec_realloc(void *ptr, size_t sz)   ATTRIBUTE((malloc)) ATTRIBUTE((alloc_size(1))) ATTRIBUTE((warn_unused_result));
+void mexec_free(void *ptr);
 void init_pike_memory (void);
 void exit_pike_memory (void);
 
diff --git a/src/stralloc.c b/src/stralloc.c
index 8cd6bd915e64181f552f6236de9ed401036e2111..34b798e4f7656e1eb245a14aa0661af67216c9fe 100644
--- a/src/stralloc.c
+++ b/src/stralloc.c
@@ -248,28 +248,11 @@ CONVERT(1,2)
 CONVERT(2,0)
 CONVERT(2,1)
 
-
-PMOD_EXPORT int generic_compare_strings(const void *a, ptrdiff_t alen, int asize,
-					const void *b, ptrdiff_t blen, int bsize)
-{
 #define TWO_SIZES(X,Y) (((X)<<2)+(Y))
-  if(alen != blen) return 0;
-  if(asize==bsize)
-  {
-    return !MEMCMP(a,b,alen<<asize);
-  }else{
-    INT32 pos;
-    for(pos=0;pos< alen ;pos++)
-      if(generic_extract(a,asize,pos) != generic_extract(b,bsize,pos))
-	return 0;
-    return 1;
-  }
-}
-
 
-PMOD_EXPORT void generic_memcpy(PCHARP to,
-				PCHARP from,
-				ptrdiff_t len)
+void generic_memcpy(PCHARP to,
+                    PCHARP from,
+                    ptrdiff_t len)
 {
 #ifdef PIKE_DEBUG
   if(len<0)
@@ -768,7 +751,7 @@ PMOD_EXPORT void hash_string(struct pike_string *s)
  * This function assumes that the shift size is already the minimum it
  * can be.
  */
-PMOD_EXPORT struct pike_string *low_end_shared_string(struct pike_string *s)
+struct pike_string *low_end_shared_string(struct pike_string *s)
 {
   ptrdiff_t len;
   size_t h=0;
@@ -873,6 +856,7 @@ PMOD_EXPORT struct pike_string *end_shared_string(struct pike_string *s)
   return low_end_shared_string(s);
 }
 
+#if 0
 PMOD_EXPORT struct pike_string *defer_end_string(struct pike_string *s)
 {
 #ifdef STRING_DEFER_THRESHOLD
@@ -882,6 +866,7 @@ PMOD_EXPORT struct pike_string *defer_end_string(struct pike_string *s)
 #endif
   return end_shared_string(s);
 }
+#endif
 
 PMOD_EXPORT struct pike_string *end_and_resize_shared_string(struct pike_string *str, ptrdiff_t len)
 {
@@ -1045,7 +1030,7 @@ PMOD_EXPORT struct pike_string *debug_make_shared_string2(const p_wchar2 *str)
 
 /*** Free strings ***/
 
-PMOD_EXPORT void unlink_pike_string(struct pike_string *s)
+static void unlink_pike_string(struct pike_string *s)
 {
   size_t h;
   LOCK_BUCKET(s->hval);
@@ -1108,7 +1093,7 @@ PMOD_EXPORT void really_free_string(struct pike_string *s)
   GC_FREE_SIMPLE_BLOCK(s);
 }
 
-PMOD_EXPORT void do_really_free_string(struct pike_string *s)
+void do_really_free_string(struct pike_string *s)
 {
   if (s)
     really_free_string(s);
@@ -1294,7 +1279,7 @@ PMOD_EXPORT void verify_shared_strings_tables(void)
     Pike_fatal("Num strings is wrong %d!=%d\n",num,num_strings);
 }
 
-PMOD_EXPORT int safe_debug_findstring(struct pike_string *foo)
+int safe_debug_findstring(struct pike_string *foo)
 {
   unsigned INT32 e;
   if(!base_table) return 0;
@@ -1315,7 +1300,7 @@ PMOD_EXPORT int safe_debug_findstring(struct pike_string *foo)
   return 0;
 }
 
-PMOD_EXPORT struct pike_string *debug_findstring(const struct pike_string *foo)
+struct pike_string *debug_findstring(const struct pike_string *foo)
 {
   struct pike_string *tmp;
   tmp=propagate_shared_string(foo, HMODULO(foo->hval));
@@ -1443,7 +1428,7 @@ PMOD_EXPORT int low_quick_binary_strcmp(char *a, ptrdiff_t alen,
 
 
 /* does not take locale into account */
-PMOD_EXPORT ptrdiff_t generic_quick_binary_strcmp(const char *a,
+ptrdiff_t generic_quick_binary_strcmp(const char *a,
 						  ptrdiff_t alen, int asize,
 						  const char *b,
 						  ptrdiff_t blen, int bsize)
@@ -1489,7 +1474,7 @@ PMOD_EXPORT ptrdiff_t generic_quick_binary_strcmp(const char *a,
  *
  * This can be used by eg replace_many() to speed up the comparisons.
  */
-PMOD_EXPORT ptrdiff_t generic_find_binary_prefix(const char *a,
+ptrdiff_t generic_find_binary_prefix(const char *a,
 						 ptrdiff_t alen, int asize,
 						 const char *b,
 						 ptrdiff_t blen, int bsize)
@@ -1646,8 +1631,8 @@ PMOD_EXPORT struct pike_string *realloc_unlinked_string(struct pike_string *a,
 }
 
 /* Returns an unlinked string ready for end_shared_string */
-PMOD_EXPORT struct pike_string *realloc_shared_string(struct pike_string *a,
-						      ptrdiff_t size)
+static struct pike_string *realloc_shared_string(struct pike_string *a,
+                                                 ptrdiff_t size)
 {
   struct pike_string *r;
   if(a->refs==1)
@@ -1662,7 +1647,7 @@ PMOD_EXPORT struct pike_string *realloc_shared_string(struct pike_string *a,
   }
 }
 
-PMOD_EXPORT struct pike_string *new_realloc_shared_string(struct pike_string *a, INT32 size, int shift)
+struct pike_string *new_realloc_shared_string(struct pike_string *a, INT32 size, int shift)
 {
   struct pike_string *r;
   if(shift == a->size_shift) return realloc_shared_string(a,size);
@@ -1681,7 +1666,7 @@ PMOD_EXPORT struct pike_string *new_realloc_shared_string(struct pike_string *a,
  * Phew, this function become complicated when I inserted magic for wide
  * characters...
  */
-PMOD_EXPORT struct pike_string *modify_shared_string(struct pike_string *a,
+struct pike_string *modify_shared_string(struct pike_string *a,
 					 INT32 index,
 					 INT32 c)
 {
@@ -3125,7 +3110,7 @@ PMOD_EXPORT PCHARP MEMCHR_PCHARP(PCHARP ptr, int chr, ptrdiff_t len)
 {
   switch(ptr.shift)
   {
-    case 0: return MKPCHARP(MEMCHR0(ptr.ptr,chr,len),0);
+    case 0: return MKPCHARP(MEMCHR(ptr.ptr,chr,len),0);
     case 1: return MKPCHARP(MEMCHR1((p_wchar1 *)ptr.ptr,chr,len),1);
     case 2: return MKPCHARP(MEMCHR2((p_wchar2 *)ptr.ptr,chr,len),2);
   }
@@ -3220,7 +3205,8 @@ PMOD_EXPORT long STRTOL_PCHARP(PCHARP str, PCHARP *ptr, int base)
   }
 }
 
-PMOD_EXPORT int string_to_svalue_inumber(struct svalue *r,
+/*
+static int string_to_svalue_inumber(struct svalue *r,
 			     char * str,
 			     char **ptr,
 			     int base,
@@ -3235,8 +3221,9 @@ PMOD_EXPORT int string_to_svalue_inumber(struct svalue *r,
   if(ptr) *ptr=(char *)tmp.ptr;
   return ret;
 }
+*/
 
-PMOD_EXPORT int wide_string_to_svalue_inumber(struct svalue *r,
+int wide_string_to_svalue_inumber(struct svalue *r,
 					      void * str,
 					      void *ptr,
 					      int base,
diff --git a/src/stralloc.h b/src/stralloc.h
index bc42a82ab65f6362b6a7037021ef8ce85b586401..86fd4c43feca2f72f124e492bbf323b8721a6afa 100644
--- a/src/stralloc.h
+++ b/src/stralloc.h
@@ -239,7 +239,7 @@ PMOD_EXPORT extern struct pike_string *empty_pike_string;
 /* Prototypes begin here */
 PMOD_EXPORT p_wchar2 index_shared_string(struct pike_string *s,
 					 ptrdiff_t pos);
-PMOD_EXPORT void low_set_index(struct pike_string *s, ptrdiff_t pos,
+void low_set_index(struct pike_string *s, ptrdiff_t pos,
 			       int value);
 PMOD_EXPORT struct pike_string *debug_check_size_shift(struct pike_string *a,int shift);
 CONVERT(0,1)
@@ -248,14 +248,16 @@ CONVERT(1,0)
 CONVERT(1,2)
 CONVERT(2,0)
 CONVERT(2,1)
+/*
 PMOD_EXPORT int generic_compare_strings(const void *a, ptrdiff_t alen, int asize,
 					const void *b, ptrdiff_t blen, int bsize);
-PMOD_EXPORT void generic_memcpy(PCHARP to,
-				PCHARP from,
-				ptrdiff_t len);
+*/
+void generic_memcpy(PCHARP to,
+                    PCHARP from,
+                    ptrdiff_t len);
 PMOD_EXPORT void pike_string_cpy(PCHARP to, struct pike_string *from);
-PMOD_EXPORT struct pike_string *binary_findstring(const char *foo, ptrdiff_t l);
-PMOD_EXPORT struct pike_string *findstring(const char *foo);
+struct pike_string *binary_findstring(const char *foo, ptrdiff_t l);
+struct pike_string *findstring(const char *foo);
 struct short_pike_string0;
 struct short_pike_string1;
 struct short_pike_string2;
@@ -264,58 +266,52 @@ BLOCK_ALLOC(short_pike_string1, SHORT_STRING_BLOCK);
 BLOCK_ALLOC(short_pike_string2, SHORT_STRING_BLOCK);
 
 
-
-
-PMOD_EXPORT struct pike_string *debug_begin_shared_string(size_t len);
-PMOD_EXPORT struct pike_string *debug_begin_wide_shared_string(size_t len, int shift);
+PMOD_EXPORT struct pike_string *debug_begin_shared_string(size_t len) ATTRIBUTE((malloc));
+PMOD_EXPORT struct pike_string *debug_begin_wide_shared_string(size_t len, int shift)  ATTRIBUTE((malloc));
 PMOD_EXPORT struct pike_string *low_end_shared_string(struct pike_string *s);
 PMOD_EXPORT struct pike_string *end_shared_string(struct pike_string *s);
-PMOD_EXPORT struct pike_string *end_and_resize_shared_string(struct pike_string *str, ptrdiff_t len);
-PMOD_EXPORT struct pike_string * debug_make_shared_binary_string(const char *str,size_t len);
-PMOD_EXPORT struct pike_string * debug_make_shared_binary_pcharp(const PCHARP str,size_t len);
-PMOD_EXPORT struct pike_string * debug_make_shared_pcharp(const PCHARP str);
-PMOD_EXPORT struct pike_string * debug_make_shared_binary_string0(const p_wchar0 *str,size_t len);
-PMOD_EXPORT struct pike_string * debug_make_shared_binary_string1(const p_wchar1 *str,size_t len);
-PMOD_EXPORT struct pike_string * debug_make_shared_binary_string2(const p_wchar2 *str,size_t len);
-PMOD_EXPORT struct pike_string *debug_make_shared_string(const char *str);
-PMOD_EXPORT struct pike_string *debug_make_shared_string0(const p_wchar0 *str);
-PMOD_EXPORT struct pike_string *debug_make_shared_string1(const p_wchar1 *str);
-PMOD_EXPORT struct pike_string *debug_make_shared_string2(const p_wchar2 *str);
-PMOD_EXPORT void unlink_pike_string(struct pike_string *s);
+PMOD_EXPORT struct pike_string *end_and_resize_shared_string(struct pike_string *str, ptrdiff_t len) ;
+PMOD_EXPORT struct pike_string * debug_make_shared_binary_string(const char *str,size_t len)  ATTRIBUTE((malloc));
+PMOD_EXPORT struct pike_string * debug_make_shared_binary_pcharp(const PCHARP str,size_t len) ATTRIBUTE((malloc));
+PMOD_EXPORT struct pike_string * debug_make_shared_pcharp(const PCHARP str) ATTRIBUTE((malloc));
+PMOD_EXPORT struct pike_string * debug_make_shared_binary_string0(const p_wchar0 *str,size_t len) ATTRIBUTE((malloc));
+PMOD_EXPORT struct pike_string * debug_make_shared_binary_string1(const p_wchar1 *str,size_t len) ATTRIBUTE((malloc));
+PMOD_EXPORT struct pike_string * debug_make_shared_binary_string2(const p_wchar2 *str,size_t len) ATTRIBUTE((malloc));
+PMOD_EXPORT struct pike_string *debug_make_shared_string(const char *str) ATTRIBUTE((malloc));
+PMOD_EXPORT struct pike_string *debug_make_shared_string0(const p_wchar0 *str) ATTRIBUTE((malloc));
+PMOD_EXPORT struct pike_string *debug_make_shared_string1(const p_wchar1 *str) ATTRIBUTE((malloc));
+PMOD_EXPORT struct pike_string *debug_make_shared_string2(const p_wchar2 *str) ATTRIBUTE((malloc));
 PMOD_EXPORT void do_free_string(struct pike_string *s);
-PMOD_EXPORT void do_really_free_string(struct pike_string *s);
 PMOD_EXPORT void do_free_unlinked_pike_string(struct pike_string *s);
 PMOD_EXPORT void really_free_string(struct pike_string *s);
 PMOD_EXPORT void debug_free_string(struct pike_string *s);
 struct pike_string *add_string_status(int verbose);
 PMOD_EXPORT void check_string(struct pike_string *s);
 PMOD_EXPORT void verify_shared_strings_tables(void);
-PMOD_EXPORT int safe_debug_findstring(struct pike_string *foo);
-PMOD_EXPORT struct pike_string *debug_findstring(const struct pike_string *foo);
+int safe_debug_findstring(struct pike_string *foo);
+struct pike_string *debug_findstring(const struct pike_string *foo);
 PMOD_EXPORT void debug_dump_pike_string(struct pike_string *s, INT32 max);
 void dump_stralloc_strings(void);
-PMOD_EXPORT int low_quick_binary_strcmp(char *a, ptrdiff_t alen,
-					char *b, ptrdiff_t blen);
-PMOD_EXPORT ptrdiff_t generic_quick_binary_strcmp(const char *a,
-						  ptrdiff_t alen, int asize,
-						  const char *b,
-						  ptrdiff_t blen, int bsize);
-PMOD_EXPORT ptrdiff_t generic_find_binary_prefix(const char *a,
-						 ptrdiff_t alen, int asize,
-						 const char *b,
-						 ptrdiff_t blen, int bsize);
-PMOD_EXPORT int c_compare_string(struct pike_string *s, char *foo, int len);
+int low_quick_binary_strcmp(char *a, ptrdiff_t alen,
+                            char *b, ptrdiff_t blen) ATTRIBUTE((pure));
+ptrdiff_t generic_quick_binary_strcmp(const char *a,
+                                      ptrdiff_t alen, int asize,
+                                      const char *b,
+                                      ptrdiff_t blen, int bsize) ATTRIBUTE((pure));
+ptrdiff_t generic_find_binary_prefix(const char *a,
+                                     ptrdiff_t alen, int asize,
+                                     const char *b,
+                                     ptrdiff_t blen, int bsize) ATTRIBUTE((pure));
+PMOD_EXPORT int c_compare_string(struct pike_string *s, char *foo, int len) ATTRIBUTE((pure));
 PMOD_EXPORT ptrdiff_t my_quick_strcmp(struct pike_string *a,
-				      struct pike_string *b);
-PMOD_EXPORT ptrdiff_t my_strcmp(struct pike_string *a,struct pike_string *b);
-PMOD_EXPORT struct pike_string *realloc_unlinked_string(struct pike_string *a,
-							ptrdiff_t size);
-PMOD_EXPORT struct pike_string *realloc_shared_string(struct pike_string *a,
-						      ptrdiff_t size);
-PMOD_EXPORT struct pike_string *new_realloc_shared_string(struct pike_string *a, INT32 size, int shift);
-PMOD_EXPORT struct pike_string *modify_shared_string(struct pike_string *a,
-					 INT32 position,
-					 INT32 c);
+				      struct pike_string *b) ATTRIBUTE((pure));
+PMOD_EXPORT ptrdiff_t my_strcmp(struct pike_string *a,struct pike_string *b) ATTRIBUTE((pure));
+struct pike_string *realloc_unlinked_string(struct pike_string *a,
+                                            ptrdiff_t size);
+struct pike_string *new_realloc_shared_string(struct pike_string *a, INT32 size, int shift) ATTRIBUTE((malloc));
+struct pike_string *modify_shared_string(struct pike_string *a,
+                                         INT32 position,
+                                         INT32 c);
 PMOD_EXPORT struct pike_string *add_shared_strings(struct pike_string *a,
 					 struct pike_string *b);
 PMOD_EXPORT struct pike_string *add_and_free_shared_strings(struct pike_string *a,
@@ -393,12 +389,12 @@ PMOD_EXPORT int string_to_svalue_inumber(struct svalue *r,
 			     char **ptr,
 			     int base,
 			     int maxlength);
-PMOD_EXPORT int wide_string_to_svalue_inumber(struct svalue *r,
+int wide_string_to_svalue_inumber(struct svalue *r,
 					      void * str,
 					      void *ptr,
 					      int base,
 					      ptrdiff_t maxlength,
-					      int shift);
+                          int shift);
 int safe_wide_string_to_svalue_inumber(struct svalue *r,
 				       void * str,
 				       void *ptr,
@@ -413,7 +409,7 @@ PMOD_EXPORT int pcharp_to_svalue_inumber(struct svalue *r,
 PMOD_EXPORT int convert_stack_top_string_to_inumber(int base);
 PMOD_EXPORT double STRTOD_PCHARP(PCHARP nptr, PCHARP *endptr);
 PMOD_EXPORT p_wchar0 *require_wstring0(struct pike_string *s,
-			   char **to_free);
+               char **to_free);
 PMOD_EXPORT p_wchar1 *require_wstring1(struct pike_string *s,
 			   char **to_free);
 PMOD_EXPORT p_wchar2 *require_wstring2(struct pike_string *s,