This patch fixes a couple of cases where arithmetic on void * pointers
is being done, which isn't valid although gcc seems to allow it.
Of course the memory.c code is broken anyway because it assumes a
pointer will fit in an IV and I'm not sure that will always be true
will it? Anyway with this patch and the others it now builds on
a Unixware box with the system compiler:
Index: memory.c
===================================================================
RCS file: /home/perlcvs/parrot/memory.c,v
retrieving revision 1.3
diff -u -r1.3 memory.c
--- memory.c 2001/09/12 17:58:55 1.3
+++ memory.c 2001/09/13 09:00:34
@@ -26,7 +26,7 @@
mem = malloc(max_to_alloc);
if (((IV)mem & mask) < (IV)mem) {
- mem = (void *)((IV)mem & mask) + ~mask + 1;
+ mem = (void *)(((IV)mem & mask) + ~mask + 1);
}
return mem;
}
Index: strnative.c
===================================================================
RCS file: /home/perlcvs/parrot/strnative.c,v
retrieving revision 1.5
diff -u -r1.5 strnative.c
--- strnative.c 2001/09/13 08:44:08 1.5
+++ strnative.c 2001/09/13 09:00:34
@@ -26,7 +26,7 @@
/* b is now in native format */
string_grow(a, a->strlen + b->strlen);
- Sys_Memcopy(a->bufstart + a->strlen, b->bufstart, b->strlen);
+ Sys_Memcopy((char *)a->bufstart + a->strlen, b->bufstart, b->strlen);
a->strlen = a->bufused = a->strlen + b->strlen;
return a;
}
@@ -47,7 +47,7 @@
/* Offset and length have already been "normalized" */
string_grow(dest, src->strlen - length);
- Sys_Memcopy(dest->bufstart, src->bufstart + offset, length);
+ Sys_Memcopy(dest->bufstart, (char *)src->bufstart + offset, length);
dest->strlen = dest->bufused = length;
return dest;
Tom
--
Tom Hughes ([EMAIL PROTECTED])
http://www.compton.nu