diff --git a/src/global.h b/src/global.h
index 8e2e058e431b5664064afd3c5a92cd35679dfd3a..246be3b8e3fda1ce16878a33f873fffe63ecda7a 100644
--- a/src/global.h
+++ b/src/global.h
@@ -494,7 +494,7 @@ typedef signed INT32 p_wchar2;
 
 typedef struct p_wchar_p
 {
-  p_wchar0 *ptr;
+  void *ptr;
   int shift;
 } PCHARP;
 
diff --git a/src/stralloc.h b/src/stralloc.h
index 076e39fb30f040dc44f8d7154eddd60780fa21e8..a67a86b22003d687ff0c77ad230350bf46875824 100644
--- a/src/stralloc.h
+++ b/src/stralloc.h
@@ -155,7 +155,7 @@ PMOD_EXPORT p_wchar2 index_shared_string(const struct pike_string *s, ptrdiff_t
 #define INDEX_PCHARP(X,Y) INDEX_CHARP((X).ptr,(Y),(X).shift)
 #define SET_INDEX_PCHARP(X,Y,Z) SET_INDEX_CHARP((X).ptr,(Y),(X).shift,(Z))
 #define EXTRACT_PCHARP(X) INDEX_CHARP((X).ptr,(0),(X).shift)
-#define INC_PCHARP(X,Y) (((X).ptr)+= SAL(Y, (X).shift))
+#define INC_PCHARP(X,Y) (((X).ptr) = ((char*)((X).ptr))+SAL(Y, (X).shift))
 
 #define LOW_COMPARE_PCHARP(X,CMP,Y) (((char *)((X).ptr)) CMP ((char *)((Y).ptr)))
 #define LOW_SUBTRACT_PCHARP(X,Y) (LOW_COMPARE_PCHARP((X),-,(Y))>>(X).shift)
@@ -171,7 +171,7 @@ PMOD_EXPORT p_wchar2 index_shared_string(const struct pike_string *s, ptrdiff_t
 static INLINE PCHARP __attribute__((unused)) MKPCHARP(const void *ptr, int shift)
 {
   PCHARP tmp;
-  tmp.ptr=(p_wchar0 *)ptr;
+  tmp.ptr=(void*)ptr;
   tmp.shift=shift;
   return tmp;
 }