@@ -123,27 +123,24 @@ impl Lz4Encoder {
123
123
Lz4Fn :: Flush | Lz4Fn :: End => self . flush_buffer_size ,
124
124
} ;
125
125
126
- let direct_output = output. unwritten ( ) . len ( ) >= min_dst_size;
127
-
128
- let ( dst_buffer, dst_max_size) = if direct_output {
129
- let output_len = output. unwritten ( ) . len ( ) ;
130
- ( output. unwritten_mut ( ) , output_len)
131
- } else {
126
+ let ( dst_buffer, maybe_internal_buffer) = if min_dst_size > output. unwritten ( ) . len ( ) {
132
127
let buffer_size = self . block_buffer_size ;
133
128
let buffer = self
134
129
. maybe_buffer
135
130
. get_or_insert_with ( || PartialBuffer :: new ( Vec :: with_capacity ( buffer_size) ) ) ;
136
131
buffer. reset ( ) ;
137
- ( buffer. unwritten_mut ( ) , buffer_size)
132
+ ( buffer. unwritten_mut ( ) . as_mut_ptr ( ) , Some ( buffer) )
133
+ } else {
134
+ ( output. unwritten_mut ( ) . as_mut_ptr ( ) , None )
138
135
} ;
139
136
140
137
let len = match lz4_fn {
141
138
Lz4Fn :: Begin => {
142
139
let len = check_error ( unsafe {
143
140
LZ4F_compressBegin (
144
141
self . ctx . get_mut ( ) . ctx ,
145
- dst_buffer. as_mut_ptr ( ) ,
146
- dst_max_size ,
142
+ dst_buffer,
143
+ min_dst_size ,
147
144
& self . preferences ,
148
145
)
149
146
} ) ?;
@@ -155,8 +152,8 @@ impl Lz4Encoder {
155
152
let len = check_error ( unsafe {
156
153
LZ4F_compressUpdate (
157
154
self . ctx . get_mut ( ) . ctx ,
158
- dst_buffer. as_mut_ptr ( ) ,
159
- dst_max_size ,
155
+ dst_buffer,
156
+ min_dst_size ,
160
157
input. unwritten ( ) . as_ptr ( ) ,
161
158
size,
162
159
core:: ptr:: null ( ) ,
@@ -168,17 +165,17 @@ impl Lz4Encoder {
168
165
Lz4Fn :: Flush => check_error ( unsafe {
169
166
LZ4F_flush (
170
167
self . ctx . get_mut ( ) . ctx ,
171
- dst_buffer. as_mut_ptr ( ) ,
172
- dst_max_size ,
168
+ dst_buffer,
169
+ min_dst_size ,
173
170
core:: ptr:: null ( ) ,
174
171
)
175
172
} ) ?,
176
173
Lz4Fn :: End => {
177
174
let len = check_error ( unsafe {
178
175
LZ4F_compressEnd (
179
176
self . ctx . get_mut ( ) . ctx ,
180
- dst_buffer. as_mut_ptr ( ) ,
181
- dst_max_size ,
177
+ dst_buffer,
178
+ min_dst_size ,
182
179
core:: ptr:: null ( ) ,
183
180
)
184
181
} ) ?;
@@ -187,20 +184,15 @@ impl Lz4Encoder {
187
184
}
188
185
} ;
189
186
190
- let drained_after = if direct_output {
191
- output. advance ( len) ;
192
- len
193
- } else {
194
- // SAFETY: buffer is initialized above incase of a non-direct operation
187
+ let drained_after = if let Some ( internal_buffer) = maybe_internal_buffer {
195
188
unsafe {
196
- self . maybe_buffer
197
- . as_mut ( )
198
- . unwrap_unchecked ( )
199
- . get_mut ( )
200
- . set_len ( len) ;
189
+ internal_buffer. get_mut ( ) . set_len ( len) ;
201
190
}
202
191
let ( d, _) = self . drain_buffer ( output) ;
203
192
d
193
+ } else {
194
+ output. advance ( len) ;
195
+ len
204
196
} ;
205
197
206
198
Ok ( drained_before + drained_after)
0 commit comments