From d0e0ce2aa23f036675288735a43fc6581d79c95c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn-Egil=20Dahlberg?= <egil@erlang.org>
Date: Mon, 4 Mar 2013 18:06:12 +0100
Subject: erts: Fix void * arithmetic

---
 erts/emulator/beam/io.c                  |  8 ++++----
 erts/emulator/drivers/common/efile_drv.c |  6 +++---
 erts/emulator/drivers/unix/unix_efile.c  |  2 +-
 erts/emulator/sys/common/erl_mseg.c      | 10 +++++-----
 4 files changed, 13 insertions(+), 13 deletions(-)

(limited to 'erts')

diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c
index 8c67f731f4..a9771de7ad 100644
--- a/erts/emulator/beam/io.c
+++ b/erts/emulator/beam/io.c
@@ -5960,7 +5960,7 @@ int driver_outputv(ErlDrvPort ix, char* hbuf, ErlDrvSizeT hlen,
 	    binv++;
 	    n--;
 	} else {
-	    iov->iov_base += skip;
+	    iov->iov_base = ((char *)(iov->iov_base)) + skip;
 	    iov->iov_len -= skip;
 	    skip = 0;
 	}
@@ -6405,7 +6405,7 @@ int driver_enqv(ErlDrvPort ix, ErlIOVec* vec, ErlDrvSizeT skip)
 	    n--;
 	}
 	else {
-	    iov->iov_base += skip;
+	    iov->iov_base = ((char *)(iov->iov_base)) + skip;
 	    iov->iov_len -= skip;
 	    skip = 0;
 	}
@@ -6470,7 +6470,7 @@ int driver_pushqv(ErlDrvPort ix, ErlIOVec* vec, ErlDrvSizeT skip)
 	    n--;
 	}
 	else {
-	    iov->iov_base += skip;
+	    iov->iov_base = ((char *)(iov->iov_base)) + skip;
 	    iov->iov_len -= skip;
 	    skip = 0;
 	}
@@ -6529,7 +6529,7 @@ ErlDrvSizeT driver_deq(ErlDrvPort ix, ErlDrvSizeT size)
 	    q->v_head++;
 	}
 	else {
-	    q->v_head->iov_base += size;
+	    q->v_head->iov_base = ((char *)(q->v_head->iov_base)) + size;
 	    q->v_head->iov_len -= size;
 	    size = 0;
 	}
diff --git a/erts/emulator/drivers/common/efile_drv.c b/erts/emulator/drivers/common/efile_drv.c
index b202556f1e..a2ef0db83c 100644
--- a/erts/emulator/drivers/common/efile_drv.c
+++ b/erts/emulator/drivers/common/efile_drv.c
@@ -1346,7 +1346,7 @@ static void invoke_preadv(void *data)
 	      = efile_pread(&d->errInfo, 
 			    (int) d->fd,
 			    c->offsets[c->cnt] + c->size,
-			    ev->iov[1 + c->cnt].iov_base + c->size,
+			    ((char *)ev->iov[1 + c->cnt].iov_base) + c->size,
 			    read_size,
 			    &bytes_read))) {
 	    bytes_read_so_far += bytes_read;
@@ -1641,7 +1641,7 @@ static void invoke_pwritev(void *data) {
 		- c->free_size;
 	}
 	d->result_ok = efile_pwrite(&d->errInfo, (int) d->fd,
-				    iov[iovcnt].iov_base + p,
+				    (char *)(iov[iovcnt].iov_base) + p,
 				    write_size,
 				    c->specs[c->cnt].offset);
 	if (! d->result_ok) {
@@ -3813,7 +3813,7 @@ file_outputv(ErlDrvData e, ErlIOVec *ev) {
 	res_ev->iov[0].iov_base = res_ev->binv[0]->orig_bytes;
 	/* Fill in the number of buffers in the header */
 	put_int32(0, res_ev->iov[0].iov_base);
-	put_int32(n, res_ev->iov[0].iov_base+4);
+	put_int32(n, (char *)(res_ev->iov[0].iov_base) + 4);
 	/**/
 	res_ev->size = res_ev->iov[0].iov_len;
 	if (n == 0) {
diff --git a/erts/emulator/drivers/unix/unix_efile.c b/erts/emulator/drivers/unix/unix_efile.c
index 558651fff9..2bd5177be1 100644
--- a/erts/emulator/drivers/unix/unix_efile.c
+++ b/erts/emulator/drivers/unix/unix_efile.c
@@ -629,7 +629,7 @@ efile_writev(Efile_error* errInfo,   /* Where to return error codes */
 		    if (w < iov[cnt].iov_len) {
 			/* Adjust the buffer for next write */
 			iov[cnt].iov_len -= w;
-			iov[cnt].iov_base += w;
+			iov[cnt].iov_base = ((char *)iov[cnt].iov_base) + w;
 			w = 0;
 			break;
 		    } else {
diff --git a/erts/emulator/sys/common/erl_mseg.c b/erts/emulator/sys/common/erl_mseg.c
index bd8ba82a5f..f5a29fcb95 100644
--- a/erts/emulator/sys/common/erl_mseg.c
+++ b/erts/emulator/sys/common/erl_mseg.c
@@ -350,7 +350,7 @@ schedule_cache_check(ErtsMsegAllctr_t *ma) {
 static ERTS_INLINE void *
 mmap_align(ErtsMsegAllctr_t *ma, void *addr, size_t length, int prot, int flags, int fd, off_t offset) {
 
-    void *p, *q;
+    char *p, *q;
     UWord d;
 
     p = mmap(addr, length, prot, flags, fd, offset);
@@ -366,14 +366,14 @@ mmap_align(ErtsMsegAllctr_t *ma, void *addr, size_t length, int prot, int flags,
     if ((p = mmap(addr, length + MSEG_ALIGNED_SIZE, prot, flags, fd, offset)) == MAP_FAILED)
 	return MAP_FAILED;
 
-    q = (void *)ALIGNED_CEILING(p);
-    d = q - p;
+    q = (void *)ALIGNED_CEILING((char *)p);
+    d = (UWord)(q - p);
 
     if (d > 0)
 	munmap(p, d);
 
     if (MSEG_ALIGNED_SIZE - d > 0)
-	munmap((void *) (q + length), MSEG_ALIGNED_SIZE - d);
+	munmap((void *)(q + length), MSEG_ALIGNED_SIZE - d);
 
     return q;
 }
@@ -708,7 +708,7 @@ static ERTS_INLINE void *cache_get_segment(MemKind *mk, Uint *size_p, Uint flags
 
 	    /* Use current cache placement for remaining segment space */
 
-	    best->seg  = seg + size;
+	    best->seg  = ((char *)seg) + size;
 	    best->size = csize - size;
 
 	    ASSERT((size % GET_PAGE_SIZE) == 0);
-- 
cgit v1.2.3