@@ -563,16 +563,25 @@ static void send_all_trees(deflate_state *s, int lcodes, int dcodes, int blcodes
563
563
564
564
Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4 , "not enough codes" );
565
565
Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES , "too many codes" );
566
+
567
+ // Temp local variables
568
+ int filled = s -> bi_valid ;
569
+ uint16_t bit_buf = s -> bi_buf ;
570
+
566
571
Tracev ((stderr , "\nbl counts: " ));
567
- send_bits (s , lcodes - 257 , 5 , s -> bi_buf , s -> bi_valid ); /* not +255 as stated in appnote.txt */
568
- send_bits (s , dcodes - 1 , 5 , s -> bi_buf , s -> bi_valid );
569
- send_bits (s , blcodes - 4 , 4 , s -> bi_buf , s -> bi_valid ); /* not -3 as stated in appnote.txt */
572
+ send_bits (s , lcodes - 257 , 5 , bit_buf , filled ); /* not +255 as stated in appnote.txt */
573
+ send_bits (s , dcodes - 1 , 5 , bit_buf , filled );
574
+ send_bits (s , blcodes - 4 , 4 , bit_buf , filled ); /* not -3 as stated in appnote.txt */
570
575
for (rank = 0 ; rank < blcodes ; rank ++ ) {
571
576
Tracev ((stderr , "\nbl code %2u " , bl_order [rank ]));
572
- send_bits (s , s -> bl_tree [bl_order [rank ]].Len , 3 , s -> bi_buf , s -> bi_valid );
577
+ send_bits (s , s -> bl_tree [bl_order [rank ]].Len , 3 , bit_buf , filled );
573
578
}
574
579
Tracev ((stderr , "\nbl tree: sent %lu" , s -> bits_sent ));
575
580
581
+ // Store back temp variables
582
+ s -> bi_buf = bit_buf ;
583
+ s -> bi_valid = filled ;
584
+
576
585
send_tree (s , (ct_data * )s -> dyn_ltree , lcodes - 1 ); /* literal tree */
577
586
Tracev ((stderr , "\nlit tree: sent %lu" , s -> bits_sent ));
578
587
0 commit comments