Add userdata pointer for implementations.
diff --git a/lib/zip_source_file.h b/lib/zip_source_file.h
index dd726dc..6cf29c0 100644
--- a/lib/zip_source_file.h
+++ b/lib/zip_source_file.h
@@ -61,6 +61,7 @@
void *fout;
zip_source_file_operations_t *ops;
+ void *ops_userdata;
};
@@ -86,4 +87,4 @@
zip_int64_t (*write)(zip_source_file_context_t *ctx, const void *data, zip_uint64_t len);
};
-zip_source_t *zip_source_file_common_new(const char *fname, void *file, zip_uint64_t start, zip_int64_t len, const zip_stat_t *st, zip_source_file_operations_t *ops, zip_error_t *error);
+zip_source_t *zip_source_file_common_new(const char *fname, void *file, zip_uint64_t start, zip_int64_t len, const zip_stat_t *st, zip_source_file_operations_t *ops, void *ops_userdata, zip_error_t *error);
diff --git a/lib/zip_source_file_common.c b/lib/zip_source_file_common.c
index 845b968..0c7fe5f 100644
--- a/lib/zip_source_file_common.c
+++ b/lib/zip_source_file_common.c
@@ -50,7 +50,7 @@
}
zip_source_t *
-zip_source_file_common_new(const char *fname, void *file, zip_uint64_t start, zip_int64_t len, const zip_stat_t *st, zip_source_file_operations_t *ops, zip_error_t *error) {
+zip_source_file_common_new(const char *fname, void *file, zip_uint64_t start, zip_int64_t len, const zip_stat_t *st, zip_source_file_operations_t *ops, void *ops_userdata, zip_error_t *error) {
zip_source_file_context_t *ctx;
zip_source_t *zs;
zip_source_file_stat_t sb;
@@ -97,6 +97,7 @@
}
ctx->ops = ops;
+ ctx->ops_userdata = ops_userdata;
ctx->fname = NULL;
if (fname) {
if ((ctx->fname = ops->strdup(fname)) == NULL) {
diff --git a/lib/zip_source_file_stdio.c b/lib/zip_source_file_stdio.c
index 952629a..538797c 100644
--- a/lib/zip_source_file_stdio.c
+++ b/lib/zip_source_file_stdio.c
@@ -48,7 +48,7 @@
#endif
/* clang-format off */
-zip_source_file_operations_t ops_stdio_read = {
+static zip_source_file_operations_t ops_stdio_read = {
_zip_stdio_op_close,
NULL,
NULL,
@@ -83,7 +83,7 @@
return NULL;
}
- return zip_source_file_common_new(NULL, file, start, length, NULL, &ops_stdio_read, error);
+ return zip_source_file_common_new(NULL, file, start, length, NULL, &ops_stdio_read, NULL, error);
}
diff --git a/lib/zip_source_file_stdio_write.c b/lib/zip_source_file_stdio_write.c
index d6a182e..704dcb2 100644
--- a/lib/zip_source_file_stdio_write.c
+++ b/lib/zip_source_file_stdio_write.c
@@ -61,7 +61,7 @@
static zip_int64_t _zip_stdio_op_write(zip_source_file_context_t *ctx, const void *data, zip_uint64_t len);
/* clang-format off */
-zip_source_file_operations_t ops_stdio_write = {
+static zip_source_file_operations_t ops_stdio_write = {
_zip_stdio_op_close,
_zip_stdio_op_commit_write,
_zip_stdio_op_create_temp_output,
@@ -98,7 +98,7 @@
return NULL;
}
- return zip_source_file_common_new(fname, NULL, start, length, NULL, &ops_stdio_write, error);
+ return zip_source_file_common_new(fname, NULL, start, length, NULL, &ops_stdio_write, NULL, error);
}