mirror of
https://github.com/michaelrsweet/mxml.git
synced 2024-11-13 07:15:30 +00:00
Sync up with zipc repo.
This commit is contained in:
parent
6f32f8b4fa
commit
bba295b908
30
zipc.c
30
zipc.c
@ -55,7 +55,8 @@
|
||||
#define ZIPC_FILE_VERSION 0x0014 /* Version needed: 2.0 */
|
||||
|
||||
#define ZIPC_FLAG_CMAX 0x0002 /* Maximum compression */
|
||||
#define ZIPC_FLAG_DATA 0x0008 /* Length and CRC-32 fields follow data */
|
||||
#define ZIPC_FLAG_MASK 0x7fff /* Mask for "standard" flags we want to write */
|
||||
#define ZIPC_FLAG_STREAMED 0x8000 /* Internal bit used to flag when we need to update the CRC and length fields */
|
||||
|
||||
#define ZIPC_COMP_STORE 0 /* No compression */
|
||||
#define ZIPC_COMP_DEFLATE 8 /* Deflate compression */
|
||||
@ -219,6 +220,7 @@ zipcCreateFile(
|
||||
zipc_file_t *zf = zipc_add_file(zc, filename, compressed);
|
||||
/* ZIP container file */
|
||||
|
||||
zf->flags |= ZIPC_FLAG_STREAMED;
|
||||
zf->external_attrs = ZIPC_EXTERNAL_FILE;
|
||||
|
||||
if (zipc_write_local_header(zc, zf))
|
||||
@ -781,7 +783,7 @@ zipc_write_local_header(
|
||||
|
||||
status |= zipc_write_u32(zc, ZIPC_LOCAL_HEADER);
|
||||
status |= zipc_write_u16(zc, zf->external_attrs == ZIPC_EXTERNAL_DIR ? ZIPC_DIR_VERSION : ZIPC_FILE_VERSION);
|
||||
status |= zipc_write_u16(zc, zf->flags);
|
||||
status |= zipc_write_u16(zc, zf->flags & ZIPC_FLAG_MASK);
|
||||
status |= zipc_write_u16(zc, zf->method);
|
||||
status |= zipc_write_u32(zc, zc->modtime);
|
||||
status |= zipc_write_u32(zc, zf->uncompressed_size == 0 ? 0 : zf->crc32);
|
||||
@ -805,24 +807,24 @@ zipc_write_local_trailer(
|
||||
zipc_file_t *zf) /* I - ZIP container file */
|
||||
{
|
||||
int status = 0; /* Return status */
|
||||
long pos = ftell(zc->fp); /* Position in file */
|
||||
|
||||
|
||||
/*
|
||||
* Update the CRC-32, compressed size, and uncompressed size fields...
|
||||
*/
|
||||
if (zf->flags & ZIPC_FLAG_STREAMED)
|
||||
{
|
||||
/*
|
||||
* Update the CRC-32, compressed size, and uncompressed size fields...
|
||||
*/
|
||||
|
||||
fseek(zc->fp, zf->offset + 14, SEEK_SET);
|
||||
fseek(zc->fp, zf->offset + 14, SEEK_SET);
|
||||
|
||||
status |= zipc_write_u32(zc, zf->crc32);
|
||||
status |= zipc_write_u32(zc, (unsigned)zf->compressed_size);
|
||||
status |= zipc_write_u32(zc, (unsigned)zf->uncompressed_size);
|
||||
status |= zipc_write_u32(zc, zf->crc32);
|
||||
status |= zipc_write_u32(zc, (unsigned)zf->compressed_size);
|
||||
status |= zipc_write_u32(zc, (unsigned)zf->uncompressed_size);
|
||||
|
||||
/*
|
||||
* Go back to the end of the file...
|
||||
*/
|
||||
fseek(zc->fp, 0, SEEK_END);
|
||||
|
||||
fseek(zc->fp, pos, SEEK_SET);
|
||||
zf->flags &= ZIPC_FLAG_MASK;
|
||||
}
|
||||
|
||||
return (status);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user