Add some casts so picky c++ compilers are happy.
Based on a patch by Wolfgang Glunz.
diff --git a/lib/zip_dirent.c b/lib/zip_dirent.c
index db6141c..8ccd1d4 100644
--- a/lib/zip_dirent.c
+++ b/lib/zip_dirent.c
@@ -212,7 +212,7 @@
 {
     struct zip_dirent *tde;
 
-    if ((tde=malloc(sizeof(*tde))) == NULL)
+    if ((tde=(struct zip_dirent *)malloc(sizeof(*tde))) == NULL)
 	return NULL;
 
     if (sde)
@@ -294,7 +294,7 @@
 {
     struct zip_dirent *de;
 
-    if ((de=malloc(sizeof(*de))) == NULL)
+    if ((de=(struct zip_dirent *)malloc(sizeof(*de))) == NULL)
 	return NULL;
 
     _zip_dirent_init(de);
@@ -797,7 +797,7 @@
         /* XXX: error */
     }
     
-    if ((data=malloc(len+5)) == NULL) {
+    if ((data=(zip_uint8_t *)malloc(len+5)) == NULL) {
 	_zip_error_set(error, ZIP_ER_MEMORY, 0);
 	return NULL;
     }
diff --git a/lib/zip_extra_field.c b/lib/zip_extra_field.c
index 287e466..92733ad 100644
--- a/lib/zip_extra_field.c
+++ b/lib/zip_extra_field.c
@@ -193,7 +193,7 @@
 {
     struct zip_extra_field *ef;
 
-    if ((ef=malloc(sizeof(*ef))) == NULL)
+    if ((ef=(struct zip_extra_field *)malloc(sizeof(*ef))) == NULL)
 	return NULL;
 
     ef->next = NULL;
@@ -201,7 +201,7 @@
     ef->id = id;
     ef->size = size;
     if (size > 0) {
-	if ((ef->data=_zip_memdup(data, size, NULL)) == NULL) {
+	if ((ef->data=(zip_uint8_t *)_zip_memdup(data, size, NULL)) == NULL) {
 	    free(ef);
 	    return NULL;
 	}
diff --git a/lib/zip_source_pkware.c b/lib/zip_source_pkware.c
index f24e1d1..ec53dfe 100644
--- a/lib/zip_source_pkware.c
+++ b/lib/zip_source_pkware.c
@@ -189,7 +189,7 @@
 	if ((n=zip_source_read(src, data, len)) < 0)
 	    return ZIP_SOURCE_ERR_LOWER;
 
-	decrypt(ud, (zip_uint8_t *)data, (zip_uint8_t *)data, (zip_uint64_t)n,
+	decrypt((struct trad_pkware *)ud, (zip_uint8_t *)data, (zip_uint8_t *)data, (zip_uint64_t)n,
 		0);
 	return n;
 
diff --git a/lib/zip_string.c b/lib/zip_string.c
index 242eecd..a2d5eb5 100644
--- a/lib/zip_string.c
+++ b/lib/zip_string.c
@@ -156,12 +156,12 @@
 	return NULL;
     }
 	
-    if ((s=malloc(sizeof(*s))) == NULL) {
+    if ((s=(struct zip_string *)malloc(sizeof(*s))) == NULL) {
 	_zip_error_set(error, ZIP_ER_MEMORY, 0);
 	return NULL;
     }
 
-    if ((s->raw=malloc(length+1)) == NULL) {
+    if ((s->raw=(zip_uint8_t *)malloc(length+1)) == NULL) {
 	free(s);
 	return NULL;
     }