@@ -829,8 +829,27 @@ void fwriteMain(fwriteMainArgs args)
829829 zbuffSize / MEGA , nth , errno , strerror (errno ));
830830 // # nocov end
831831 }
832- }
832+ len = 0 ;
833+ crc = crc32 (0L , Z_NULL , 0 );
834+
835+ if (f != -1 ) {
836+ // write minimal gzip header, but not on the console
837+ static const char header [] = "\037\213\10\0\0\0\0\0\0\3" ;
838+ int ret0 = WRITE (f , header , (sizeof header ) - 1 );
839+ compress_len += (sizeof header ) - 1 ;
833840
841+ if (ret0 == -1 ) {
842+ // # nocov start
843+ int errwrite = errno ; // capture write errno now in case close fails with a different errno
844+ CLOSE (f );
845+ free (buffPool );
846+ free (zbuffPool );
847+ deflateEnd (& strm );
848+ STOP (_ ("Failed to write gzip header. Write returned %d" ), ret0 );
849+ // # nocov end
850+ }
851+ }
852+ }
834853#endif
835854
836855 // write header
@@ -873,15 +892,10 @@ void fwriteMain(fwriteMainArgs args)
873892 * ch = '\0' ;
874893 DTPRINT ("%s" , buff ); // # notranslate
875894 } else {
876- int ret0 = 0 , ret1 = 0 , ret2 = 0 ;
895+ int ret1 = 0 , ret2 = 0 ;
877896#ifndef NOZLIB
878897 if (args .is_gzip ) {
879898 char * zbuff = zbuffPool ;
880- // write minimal gzip header
881- char * header = "\037\213\10\0\0\0\0\0\0\3" ;
882- ret0 = WRITE (f , header , 10 );
883- compress_len += 10 ;
884- crc = crc32 (0L , Z_NULL , 0 );
885899
886900 size_t zbuffUsed = zbuffSize ;
887901 len = (size_t )(ch - buff );
@@ -898,16 +912,15 @@ void fwriteMain(fwriteMainArgs args)
898912#ifndef NOZLIB
899913 }
900914#endif
901- if (ret0 == -1 || ret1 || ret2 == -1 ) {
915+ if (ret1 || ret2 == -1 ) {
902916 // # nocov start
903917 int errwrite = errno ; // capture write errno now in case close fails with a different errno
904918 CLOSE (f );
905919 free (buffPool );
906920#ifndef NOZLIB
907921 free (zbuffPool );
908922#endif
909- if (ret0 == -1 ) STOP (_ ("Failed to write gzip header. Write returned %d" ), ret0 );
910- else if (ret1 ) STOP (_ ("Failed to compress gzip. compressbuff() returned %d" ), ret1 );
923+ if (ret1 ) STOP (_ ("Failed to compress gzip. compressbuff() returned %d" ), ret1 );
911924 else STOP (_ ("%s: '%s'" ), strerror (errwrite ), args .filename );
912925 // # nocov end
913926 }
0 commit comments