@@ -86,14 +86,14 @@ static void InitCompressorZlib(CompressorState *cs, int level);
86
86
static void DeflateCompressorZlib (ArchiveHandle * AH , CompressorState * cs ,
87
87
bool flush );
88
88
static void ReadDataFromArchiveZlib (ArchiveHandle * AH , ReadFunc readF );
89
- static size_t WriteDataToArchiveZlib (ArchiveHandle * AH , CompressorState * cs ,
89
+ static void WriteDataToArchiveZlib (ArchiveHandle * AH , CompressorState * cs ,
90
90
const char * data , size_t dLen );
91
91
static void EndCompressorZlib (ArchiveHandle * AH , CompressorState * cs );
92
92
#endif
93
93
94
94
/* Routines that support uncompressed data I/O */
95
95
static void ReadDataFromArchiveNone (ArchiveHandle * AH , ReadFunc readF );
96
- static size_t WriteDataToArchiveNone (ArchiveHandle * AH , CompressorState * cs ,
96
+ static void WriteDataToArchiveNone (ArchiveHandle * AH , CompressorState * cs ,
97
97
const char * data , size_t dLen );
98
98
99
99
/*
@@ -179,7 +179,7 @@ ReadDataFromArchive(ArchiveHandle *AH, int compression, ReadFunc readF)
179
179
/*
180
180
* Compress and write data to the output stream (via writeF).
181
181
*/
182
- size_t
182
+ void
183
183
WriteDataToArchive (ArchiveHandle * AH , CompressorState * cs ,
184
184
const void * data , size_t dLen )
185
185
{
@@ -190,14 +190,16 @@ WriteDataToArchive(ArchiveHandle *AH, CompressorState *cs,
190
190
{
191
191
case COMPR_ALG_LIBZ :
192
192
#ifdef HAVE_LIBZ
193
- return WriteDataToArchiveZlib (AH , cs , data , dLen );
193
+ WriteDataToArchiveZlib (AH , cs , data , dLen );
194
194
#else
195
195
exit_horribly (modulename , "not built with zlib support\n" );
196
196
#endif
197
+ break ;
197
198
case COMPR_ALG_NONE :
198
- return WriteDataToArchiveNone (AH , cs , data , dLen );
199
+ WriteDataToArchiveNone (AH , cs , data , dLen );
200
+ break ;
199
201
}
200
- return 0 ; /* keep compiler quiet */
202
+ return ;
201
203
}
202
204
203
205
/*
@@ -298,10 +300,7 @@ DeflateCompressorZlib(ArchiveHandle *AH, CompressorState *cs, bool flush)
298
300
*/
299
301
size_t len = cs -> zlibOutSize - zp -> avail_out ;
300
302
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 );
305
304
}
306
305
zp -> next_out = (void * ) out ;
307
306
zp -> avail_out = cs -> zlibOutSize ;
@@ -312,19 +311,15 @@ DeflateCompressorZlib(ArchiveHandle *AH, CompressorState *cs, bool flush)
312
311
}
313
312
}
314
313
315
- static size_t
314
+ static void
316
315
WriteDataToArchiveZlib (ArchiveHandle * AH , CompressorState * cs ,
317
316
const char * data , size_t dLen )
318
317
{
319
318
cs -> zp -> next_in = (void * ) data ;
320
319
cs -> zp -> avail_in = dLen ;
321
320
DeflateCompressorZlib (AH , cs , false);
322
321
323
- /*
324
- * we have either succeeded in writing dLen bytes or we have called
325
- * exit_horribly()
326
- */
327
- return dLen ;
322
+ return ;
328
323
}
329
324
330
325
static void
@@ -427,19 +422,12 @@ ReadDataFromArchiveNone(ArchiveHandle *AH, ReadFunc readF)
427
422
free (buf );
428
423
}
429
424
430
- static size_t
425
+ static void
431
426
WriteDataToArchiveNone (ArchiveHandle * AH , CompressorState * cs ,
432
427
const char * data , size_t dLen )
433
428
{
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 ;
443
431
}
444
432
445
433
@@ -573,12 +561,27 @@ cfopen(const char *path, const char *mode, int compression)
573
561
int
574
562
cfread (void * ptr , int size , cfp * fp )
575
563
{
564
+ int ret ;
565
+
566
+ if (size == 0 )
567
+ return 0 ;
568
+
576
569
#ifdef HAVE_LIBZ
577
570
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
+ }
579
577
else
580
578
#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 ;
582
585
}
583
586
584
587
int
@@ -595,12 +598,31 @@ cfwrite(const void *ptr, int size, cfp *fp)
595
598
int
596
599
cfgetc (cfp * fp )
597
600
{
601
+ int ret ;
602
+
598
603
#ifdef HAVE_LIBZ
599
604
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
+ }
601
617
else
602
618
#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 ;
604
626
}
605
627
606
628
char *
0 commit comments