initial libzip upgrade patch to 0.10.1

This commit is contained in:
Anatoliy Belsky 2012-06-04 21:30:04 +02:00
parent 7cae4ff02c
commit 335a11b14b
64 changed files with 2720 additions and 695 deletions

View file

@ -1,6 +1,6 @@
/*
zip_source_buffer.c -- create zip data source from buffer
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>
@ -44,13 +44,12 @@ struct read_data {
int freep;
};
static ssize_t read_data(void *state, void *data, size_t len,
enum zip_source_cmd cmd);
static zip_int64_t read_data(void *, void *, zip_uint64_t, enum zip_source_cmd);
ZIP_EXTERN(struct zip_source *)
zip_source_buffer(struct zip *za, const void *data, off_t len, int freep)
zip_source_buffer(struct zip *za, const void *data, zip_uint64_t len, int freep)
{
struct read_data *f;
struct zip_source *zs;
@ -58,7 +57,7 @@ zip_source_buffer(struct zip *za, const void *data, off_t len, int freep)
if (za == NULL)
return NULL;
if (len < 0 || (data == NULL && len > 0)) {
if (data == NULL && len > 0) {
_zip_error_set(&za->error, ZIP_ER_INVAL, 0);
return NULL;
}
@ -83,12 +82,12 @@ zip_source_buffer(struct zip *za, const void *data, off_t len, int freep)
static ssize_t
read_data(void *state, void *data, size_t len, enum zip_source_cmd cmd)
static zip_int64_t
read_data(void *state, void *data, zip_uint64_t len, enum zip_source_cmd cmd)
{
struct read_data *z;
char *buf;
size_t n;
zip_uint64_t n;
z = (struct read_data *)state;
buf = (char *)data;
@ -99,6 +98,8 @@ read_data(void *state, void *data, size_t len, enum zip_source_cmd cmd)
return 0;
case ZIP_SOURCE_READ:
/* XXX: return error if (len > ZIP_INT64_MAX) */
n = z->end - z->buf;
if (n > len)
n = len;
@ -125,6 +126,11 @@ read_data(void *state, void *data, size_t len, enum zip_source_cmd cmd)
zip_stat_init(st);
st->mtime = z->mtime;
st->size = z->end - z->data;
st->comp_size = st->size;
st->comp_method = ZIP_CM_STORE;
st->encryption_method = ZIP_EM_NONE;
st->valid = ZIP_STAT_MTIME|ZIP_STAT_SIZE|ZIP_STAT_COMP_SIZE
|ZIP_STAT_COMP_METHOD|ZIP_STAT_ENCRYPTION_METHOD;
return sizeof(*st);
}