summaryrefslogtreecommitdiff
path: root/ext/zip/lib/zip_entry_new.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/zip/lib/zip_entry_new.c')
-rw-r--r--ext/zip/lib/zip_entry_new.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/ext/zip/lib/zip_entry_new.c b/ext/zip/lib/zip_entry_new.c
index 7059b1b060..ad5d59975a 100644
--- a/ext/zip/lib/zip_entry_new.c
+++ b/ext/zip/lib/zip_entry_new.c
@@ -1,6 +1,6 @@
/*
zip_entry_new.c -- create and init struct zip_entry
- Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2009 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <libzip@nih.at>
@@ -46,20 +46,21 @@ _zip_entry_new(struct zip *za)
if (!za) {
ze = (struct zip_entry *)malloc(sizeof(struct zip_entry));
if (!ze) {
- _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
return NULL;
}
}
else {
- if (za->nentry >= za->nentry_alloc-1) {
+ if (za->nentry+1 >= za->nentry_alloc) {
+ struct zip_entry *rentries;
za->nentry_alloc += 16;
- za->entry = (struct zip_entry *)realloc(za->entry,
- sizeof(struct zip_entry)
- * za->nentry_alloc);
- if (!za->entry) {
+ rentries = (struct zip_entry *)realloc(za->entry,
+ sizeof(struct zip_entry)
+ * za->nentry_alloc);
+ if (!rentries) {
_zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
return NULL;
}
+ za->entry = rentries;
}
ze = za->entry+za->nentry;
}
@@ -67,6 +68,8 @@ _zip_entry_new(struct zip *za)
ze->state = ZIP_ST_UNCHANGED;
ze->ch_filename = NULL;
+ ze->ch_extra = NULL;
+ ze->ch_extra_len = -1;
ze->ch_comment = NULL;
ze->ch_comment_len = -1;
ze->source = NULL;