summaryrefslogtreecommitdiff
path: root/libgcab/gcab-cabinet.c
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2022-08-02 06:39:52 +0000
committerMarc-André Lureau <marcandre.lureau@gmail.com>2022-08-02 06:39:52 +0000
commit77e99e92e21376e4f6e7e41ad33462ba65281d0d (patch)
tree3f9f4bf12251e73269ba03286ebce40a15f515a5 /libgcab/gcab-cabinet.c
parent81ff4cc532046b9bd4277ab9452634a9638c31f3 (diff)
parent6b90d6204bd7a0d213833dc38eb4c5bcdb945466 (diff)
downloadgcab-77e99e92e21376e4f6e7e41ad33462ba65281d0d.tar.gz
Merge branch 'gcap-fix' into 'master'
Fix for zip compression errors See merge request GNOME/gcab!12
Diffstat (limited to 'libgcab/gcab-cabinet.c')
-rw-r--r--libgcab/gcab-cabinet.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/libgcab/gcab-cabinet.c b/libgcab/gcab-cabinet.c
index edf5a98..10087e9 100644
--- a/libgcab/gcab-cabinet.c
+++ b/libgcab/gcab-cabinet.c
@@ -274,7 +274,7 @@ gcab_cabinet_write (GCabCabinet *self,
g_autoptr(GDataOutputStream) dstream = NULL;
gssize len, offset = 0;
cdata_t block = { 0, };
- guint8 data[DATABLOCKSIZE];
+ guint8 data[CAB_MAX_BLOCK_SIZE];
gsize written;
size_t sumstr = 0;
g_autoptr(GSList) files = NULL;
@@ -300,7 +300,7 @@ gcab_cabinet_write (GCabCabinet *self,
folder.typecomp = gcab_folder_get_comptype (cabfolder);
folder.offsetdata = cheader->offsetfiles + nfiles * 16 + sumstr;
- folder.ndatab = gcab_folder_get_ndatablocks (cabfolder);
+ folder.ndatab = 0;
/* avoid seeking to allow growing output streams */
for (guint i = 0; i < folder.offsetdata; i++)
@@ -319,10 +319,13 @@ gcab_cabinet_write (GCabCabinet *self,
return FALSE;
while ((len = g_input_stream_read (in,
- &data[offset], DATABLOCKSIZE - offset,
- cancellable, error)) == (DATABLOCKSIZE - offset)) {
- if (!cdata_write (&block, dstream, folder.typecomp, data, DATABLOCKSIZE, &written, cancellable, error))
+ &data[offset], CAB_MAX_BLOCK_SIZE - offset,
+ cancellable, error)) ==
+ (CAB_MAX_BLOCK_SIZE - offset)) {
+ if (!cdata_write (&block, dstream, folder.typecomp, data,
+ CAB_MAX_BLOCK_SIZE, &written, cancellable, error))
return FALSE;
+ folder.ndatab++;
cheader->size += written;
offset = 0;
}
@@ -335,6 +338,7 @@ gcab_cabinet_write (GCabCabinet *self,
if (offset != 0) {
if (!cdata_write (&block, dstream, folder.typecomp, data, offset, &written, cancellable, error))
return FALSE;
+ folder.ndatab++;
cheader->size += written;
}