+
+void writer_zlibdeflate_flush(writer_t*writer)
+{
+#ifdef HAVE_ZLIB
+ zlibdeflate_t*z = (zlibdeflate_t*)writer->internal;
+ int ret;
+ if(writer->type != WRITER_TYPE_ZLIB) {
+ fprintf(stderr, "Wrong writer ID (writer not initialized?)\n");
+ return;
+ }
+ if(!z) {
+ fprintf(stderr, "zlib not initialized!\n");
+ return;
+ }
+
+ z->zs.next_in = 0;
+ z->zs.avail_in = 0;
+ while(1) {
+ ret = deflate(&z->zs, Z_SYNC_FLUSH);
+ if (ret != Z_OK) zlib_error(ret, "bitio:deflate_flush", &z->zs);
+ if(z->zs.next_out != z->writebuffer) {
+ writer->pos += z->zs.next_out - (Bytef*)z->writebuffer;
+ z->output->write(z->output, z->writebuffer, z->zs.next_out - (Bytef*)z->writebuffer);
+ z->zs.next_out = z->writebuffer;
+ z->zs.avail_out = ZLIB_BUFFER_SIZE;
+ }
+ /* TODO: how will zlib let us know it needs more buffer space? */
+ break;
+ }
+ return;
+#else
+ fprintf(stderr, "Error: swftools was compiled without zlib support");
+ exit(1);
+#endif
+}
+