Sync up with zipc repo.

pull/193/merge
Michael Sweet 8 years ago
parent 6f32f8b4fa
commit bba295b908
  1. 16
      zipc.c

@ -55,7 +55,8 @@
#define ZIPC_FILE_VERSION 0x0014 /* Version needed: 2.0 */ #define ZIPC_FILE_VERSION 0x0014 /* Version needed: 2.0 */
#define ZIPC_FLAG_CMAX 0x0002 /* Maximum compression */ #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_STORE 0 /* No compression */
#define ZIPC_COMP_DEFLATE 8 /* Deflate compression */ #define ZIPC_COMP_DEFLATE 8 /* Deflate compression */
@ -219,6 +220,7 @@ zipcCreateFile(
zipc_file_t *zf = zipc_add_file(zc, filename, compressed); zipc_file_t *zf = zipc_add_file(zc, filename, compressed);
/* ZIP container file */ /* ZIP container file */
zf->flags |= ZIPC_FLAG_STREAMED;
zf->external_attrs = ZIPC_EXTERNAL_FILE; zf->external_attrs = ZIPC_EXTERNAL_FILE;
if (zipc_write_local_header(zc, zf)) 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_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->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_u16(zc, zf->method);
status |= zipc_write_u32(zc, zc->modtime); status |= zipc_write_u32(zc, zc->modtime);
status |= zipc_write_u32(zc, zf->uncompressed_size == 0 ? 0 : zf->crc32); status |= zipc_write_u32(zc, zf->uncompressed_size == 0 ? 0 : zf->crc32);
@ -805,9 +807,10 @@ zipc_write_local_trailer(
zipc_file_t *zf) /* I - ZIP container file */ zipc_file_t *zf) /* I - ZIP container file */
{ {
int status = 0; /* Return status */ int status = 0; /* Return status */
long pos = ftell(zc->fp); /* Position in file */
if (zf->flags & ZIPC_FLAG_STREAMED)
{
/* /*
* Update the CRC-32, compressed size, and uncompressed size fields... * Update the CRC-32, compressed size, and uncompressed size fields...
*/ */
@ -818,11 +821,10 @@ zipc_write_local_trailer(
status |= zipc_write_u32(zc, (unsigned)zf->compressed_size); status |= zipc_write_u32(zc, (unsigned)zf->compressed_size);
status |= zipc_write_u32(zc, (unsigned)zf->uncompressed_size); status |= zipc_write_u32(zc, (unsigned)zf->uncompressed_size);
/* fseek(zc->fp, 0, SEEK_END);
* Go back to the end of the file...
*/
fseek(zc->fp, pos, SEEK_SET); zf->flags &= ZIPC_FLAG_MASK;
}
return (status); return (status);
} }

Loading…
Cancel
Save