diff options
author | Marc-André Lureau <marcandre.lureau@gmail.com> | 2022-08-02 06:39:52 +0000 |
---|---|---|
committer | Marc-André Lureau <marcandre.lureau@gmail.com> | 2022-08-02 06:39:52 +0000 |
commit | 77e99e92e21376e4f6e7e41ad33462ba65281d0d (patch) | |
tree | 3f9f4bf12251e73269ba03286ebce40a15f515a5 /libgcab/gcab-cabinet.c | |
parent | 81ff4cc532046b9bd4277ab9452634a9638c31f3 (diff) | |
parent | 6b90d6204bd7a0d213833dc38eb4c5bcdb945466 (diff) | |
download | gcab-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.c | 14 |
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; } |