* lib/zip_open.c (_zip_memdup): make static, use size_t for size
	argument, add error argument for passing error code back to caller.
* lib/zip_open.c (_zip_readcdir): error out if _zip_memdup failes.

--HG--
branch : HEAD
diff --git a/lib/zip_open.c b/lib/zip_open.c
index 2d020be..c3be7bf 100644
--- a/lib/zip_open.c
+++ b/lib/zip_open.c
@@ -1,5 +1,5 @@
 /*
-  $NiH: zip_open.c,v 1.25 2004/12/22 15:48:37 dillo Exp $
+  $NiH: zip_open.c,v 1.26 2004/12/22 15:49:19 wiz Exp $
 
   zip_open.c -- open zip archive
   Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
@@ -50,6 +50,7 @@
 static int _zip_checkcons(FILE *, struct zip_cdir *, struct zip_error *);
 static int _zip_headercomp(struct zip_dirent *, int,
 			   struct zip_dirent *, int);
+static void *_zip_memdup(const void *, size_t, struct zip_error *);
 static unsigned char *_zip_memmem(const unsigned char *, int,
 				  const unsigned char *, int);
 static struct zip_cdir *_zip_readcdir(FILE *, unsigned char *, unsigned char *,
@@ -281,7 +282,11 @@
     }
 
     if (cd->comment_len)
-	cd->comment = _zip_memdup(eocd+EOCDLEN, cd->comment_len);
+	if ((cd->comment=_zip_memdup(eocd+EOCDLEN, cd->comment_len, error))
+	    == NULL) {
+	    free(cd);
+	    return NULL;
+	}
 
     cdp = eocd;
     if (cd->size < eocd-buf) {
@@ -448,14 +453,14 @@
 
 
 
-void *
-_zip_memdup(const void *mem, int len)
+static void *
+_zip_memdup(const void *mem, size_t len, struct zip_error *error)
 {
     void *ret;
 
     ret = malloc(len);
     if (!ret) {
-	/* XXX: zip_err = ZIP_ER_MEMORY; */
+	_zip_error_set(error, ZIP_ER_MEMORY, 0);
 	return NULL;
     }