38
38
#define FST_DO_MISALIGNED_OPS
39
39
#endif
40
40
41
+ #if defined(__APPLE__ ) && defined(__MACH__ )
42
+ #define FST_MACOSX
43
+ #endif
44
+
41
45
42
46
/***********************/
43
47
/*** ***/
@@ -2186,8 +2190,7 @@ if(!xc->fh)
2186
2190
off_t offs_cache = ftello (xc -> f );
2187
2191
char * fnam = malloc (strlen (xc -> filename ) + 6 + 16 + 32 + 1 );
2188
2192
unsigned char * mem = malloc (FST_GZIO_LEN );
2189
- off_t hl ;
2190
- uint64_t uclen ;
2193
+ off_t hl , uclen ;
2191
2194
gzFile zhandle ;
2192
2195
int zfd ;
2193
2196
@@ -2223,14 +2226,22 @@ if(!xc->fh)
2223
2226
2224
2227
for (hl = 0 ; hl < uclen ; hl += FST_GZIO_LEN )
2225
2228
{
2226
- unsigned len = ((uclen - hl ) > FST_GZIO_LEN ) ? FST_GZIO_LEN : (uclen - hl );
2227
- int gzreadlen = gzread (zhandle , mem , len ); /* rc should equal len... */
2229
+ size_t len = ((uclen - hl ) > FST_GZIO_LEN ) ? FST_GZIO_LEN : (uclen - hl );
2230
+ size_t gzreadlen = gzread (zhandle , mem , len ); /* rc should equal len... */
2231
+ size_t fwlen ;
2232
+
2228
2233
if (gzreadlen != len )
2229
2234
{
2230
2235
pass_status = 0 ;
2231
2236
break ;
2232
2237
}
2233
- fstFwrite (mem , len , 1 , xc -> fh );
2238
+
2239
+ fwlen = fstFwrite (mem , len , 1 , xc -> fh );
2240
+ if (fwlen != 1 )
2241
+ {
2242
+ pass_status = 0 ;
2243
+ break ;
2244
+ }
2234
2245
}
2235
2246
gzclose (zhandle );
2236
2247
free (mem );
@@ -2625,6 +2636,10 @@ if(sectype == FST_BL_ZWRAPPER)
2625
2636
if (!fcomp ) return (0 );
2626
2637
}
2627
2638
2639
+ #if defined(FST_MACOSX )
2640
+ setvbuf (fcomp , (char * )NULL , _IONBF , 0 ); /* keeps gzip from acting weird in tandem with fopen */
2641
+ #endif
2642
+
2628
2643
#ifdef __MINGW32__
2629
2644
setvbuf (fcomp , (char * )NULL , _IONBF , 0 ); /* keeps gzip from acting weird in tandem with fopen */
2630
2645
xc -> filename_unpacked = hf ;
@@ -2646,13 +2661,20 @@ if(sectype == FST_BL_ZWRAPPER)
2646
2661
for (offpnt = 0 ; offpnt < uclen ; offpnt += FST_GZIO_LEN )
2647
2662
{
2648
2663
size_t this_len = ((uclen - offpnt ) > FST_GZIO_LEN ) ? FST_GZIO_LEN : (uclen - offpnt );
2649
- int gzreadlen = gzread (zhandle , gz_membuf , this_len );
2664
+ size_t gzreadlen = gzread (zhandle , gz_membuf , this_len );
2665
+ size_t fwlen ;
2666
+
2650
2667
if (gzreadlen != this_len )
2651
2668
{
2652
2669
gzread_pass_status = 0 ;
2653
2670
break ;
2654
2671
}
2655
- fstFwrite (gz_membuf , this_len , 1 , fcomp );
2672
+ fwlen = fstFwrite (gz_membuf , this_len , 1 , fcomp );
2673
+ if (fwlen != 1 )
2674
+ {
2675
+ gzread_pass_status = 0 ;
2676
+ break ;
2677
+ }
2656
2678
}
2657
2679
gzclose (zhandle );
2658
2680
}
@@ -2888,7 +2910,7 @@ if((!nam)||(!(xc->f=fopen(nam, "rb"))))
2888
2910
char * hf = calloc (1 , flen + 6 );
2889
2911
int rc ;
2890
2912
2891
- #ifdef __MINGW32__
2913
+ #if defined( __MINGW32__ ) || defined( FST_MACOSX )
2892
2914
setvbuf (xc -> f , (char * )NULL , _IONBF , 0 ); /* keeps gzip from acting weird in tandem with fopen */
2893
2915
#endif
2894
2916
0 commit comments