@@ -86,14 +86,14 @@ static void InitCompressorZlib(CompressorState *cs, int level);
8686static void DeflateCompressorZlib (ArchiveHandle * AH , CompressorState * cs ,
8787 bool flush );
8888static void ReadDataFromArchiveZlib (ArchiveHandle * AH , ReadFunc readF );
89- static size_t WriteDataToArchiveZlib (ArchiveHandle * AH , CompressorState * cs ,
89+ static void WriteDataToArchiveZlib (ArchiveHandle * AH , CompressorState * cs ,
9090 const char * data , size_t dLen );
9191static void EndCompressorZlib (ArchiveHandle * AH , CompressorState * cs );
9292#endif
9393
9494/* Routines that support uncompressed data I/O */
9595static void ReadDataFromArchiveNone (ArchiveHandle * AH , ReadFunc readF );
96- static size_t WriteDataToArchiveNone (ArchiveHandle * AH , CompressorState * cs ,
96+ static void WriteDataToArchiveNone (ArchiveHandle * AH , CompressorState * cs ,
9797 const char * data , size_t dLen );
9898
9999/*
@@ -179,7 +179,7 @@ ReadDataFromArchive(ArchiveHandle *AH, int compression, ReadFunc readF)
179179/*
180180 * Compress and write data to the output stream (via writeF).
181181 */
182- size_t
182+ void
183183WriteDataToArchive (ArchiveHandle * AH , CompressorState * cs ,
184184 const void * data , size_t dLen )
185185{
@@ -190,14 +190,16 @@ WriteDataToArchive(ArchiveHandle *AH, CompressorState *cs,
190190 {
191191 case COMPR_ALG_LIBZ :
192192#ifdef HAVE_LIBZ
193- return WriteDataToArchiveZlib (AH , cs , data , dLen );
193+ WriteDataToArchiveZlib (AH , cs , data , dLen );
194194#else
195195 exit_horribly (modulename , "not built with zlib support\n" );
196196#endif
197+ break ;
197198 case COMPR_ALG_NONE :
198- return WriteDataToArchiveNone (AH , cs , data , dLen );
199+ WriteDataToArchiveNone (AH , cs , data , dLen );
200+ break ;
199201 }
200- return 0 ; /* keep compiler quiet */
202+ return ;
201203}
202204
203205/*
@@ -298,10 +300,7 @@ DeflateCompressorZlib(ArchiveHandle *AH, CompressorState *cs, bool flush)
298300 */
299301 size_t len = cs -> zlibOutSize - zp -> avail_out ;
300302
301- if (cs -> writeF (AH , out , len ) != len )
302- exit_horribly (modulename ,
303- "could not write to output file: %s\n" ,
304- strerror (errno ));
303+ cs -> writeF (AH , out , len );
305304 }
306305 zp -> next_out = (void * ) out ;
307306 zp -> avail_out = cs -> zlibOutSize ;
@@ -312,19 +311,15 @@ DeflateCompressorZlib(ArchiveHandle *AH, CompressorState *cs, bool flush)
312311 }
313312}
314313
315- static size_t
314+ static void
316315WriteDataToArchiveZlib (ArchiveHandle * AH , CompressorState * cs ,
317316 const char * data , size_t dLen )
318317{
319318 cs -> zp -> next_in = (void * ) data ;
320319 cs -> zp -> avail_in = dLen ;
321320 DeflateCompressorZlib (AH , cs , false);
322321
323- /*
324- * we have either succeeded in writing dLen bytes or we have called
325- * exit_horribly()
326- */
327- return dLen ;
322+ return ;
328323}
329324
330325static void
@@ -427,19 +422,12 @@ ReadDataFromArchiveNone(ArchiveHandle *AH, ReadFunc readF)
427422 free (buf );
428423}
429424
430- static size_t
425+ static void
431426WriteDataToArchiveNone (ArchiveHandle * AH , CompressorState * cs ,
432427 const char * data , size_t dLen )
433428{
434- /*
435- * Any write function should do its own error checking but to make sure we
436- * do a check here as well...
437- */
438- if (cs -> writeF (AH , data , dLen ) != dLen )
439- exit_horribly (modulename ,
440- "could not write to output file: %s\n" ,
441- strerror (errno ));
442- return dLen ;
429+ cs -> writeF (AH , data , dLen );
430+ return ;
443431}
444432
445433
@@ -573,12 +561,27 @@ cfopen(const char *path, const char *mode, int compression)
573561int
574562cfread (void * ptr , int size , cfp * fp )
575563{
564+ int ret ;
565+
566+ if (size == 0 )
567+ return 0 ;
568+
576569#ifdef HAVE_LIBZ
577570 if (fp -> compressedfp )
578- return gzread (fp -> compressedfp , ptr , size );
571+ {
572+ ret = gzread (fp -> compressedfp , ptr , size );
573+ if (ret != size && !gzeof (fp -> compressedfp ))
574+ exit_horribly (modulename ,
575+ "could not read from input file: %s\n" , strerror (errno ));
576+ }
579577 else
580578#endif
581- return fread (ptr , 1 , size , fp -> uncompressedfp );
579+ {
580+ ret = fread (ptr , 1 , size , fp -> uncompressedfp );
581+ if (ret != size && !feof (fp -> uncompressedfp ))
582+ READ_ERROR_EXIT (fp -> uncompressedfp );
583+ }
584+ return ret ;
582585}
583586
584587int
@@ -595,12 +598,31 @@ cfwrite(const void *ptr, int size, cfp *fp)
595598int
596599cfgetc (cfp * fp )
597600{
601+ int ret ;
602+
598603#ifdef HAVE_LIBZ
599604 if (fp -> compressedfp )
600- return gzgetc (fp -> compressedfp );
605+ {
606+ ret = gzgetc (fp -> compressedfp );
607+ if (ret == EOF )
608+ {
609+ if (!gzeof (fp -> compressedfp ))
610+ exit_horribly (modulename ,
611+ "could not read from input file: %s\n" , strerror (errno ));
612+ else
613+ exit_horribly (modulename ,
614+ "could not read from input file: end of file\n" );
615+ }
616+ }
601617 else
602618#endif
603- return fgetc (fp -> uncompressedfp );
619+ {
620+ ret = fgetc (fp -> uncompressedfp );
621+ if (ret == EOF )
622+ READ_ERROR_EXIT (fp -> uncompressedfp );
623+ }
624+
625+ return ret ;
604626}
605627
606628char *
0 commit comments