@@ -354,12 +354,20 @@ impl<W: JfifWrite> Encoder<W> {
354354 ///
355355 /// Returns an error if the segment number is invalid or data exceeds the allowed size
356356 pub fn add_app_segment ( & mut self , segment_nr : u8 , data : & [ u8 ] ) -> Result < ( ) , EncodingError > {
357+ self . add_app_segment_internal ( segment_nr, data. to_vec ( ) )
358+ }
359+
360+ fn add_app_segment_internal (
361+ & mut self ,
362+ segment_nr : u8 ,
363+ data : Vec < u8 > ,
364+ ) -> Result < ( ) , EncodingError > {
357365 if segment_nr == 0 || segment_nr > 15 {
358366 Err ( EncodingError :: InvalidAppSegment ( segment_nr) )
359367 } else if data. len ( ) > 65533 {
360368 Err ( EncodingError :: AppSegmentTooLarge ( data. len ( ) ) )
361369 } else {
362- self . app_segments . push ( ( segment_nr, data. to_vec ( ) ) ) ;
370+ self . app_segments . push ( ( segment_nr, data) ) ;
363371 Ok ( ( ) )
364372 }
365373 }
@@ -385,16 +393,14 @@ impl<W: JfifWrite> Encoder<W> {
385393 return Err ( EncodingError :: IccTooLarge ( data. len ( ) ) ) ;
386394 }
387395
388- let mut chunk_data = Vec :: with_capacity ( MAX_CHUNK_LENGTH ) ;
389-
390396 for ( i, data) in data. chunks ( MAX_CHUNK_LENGTH ) . enumerate ( ) {
391- chunk_data. clear ( ) ;
397+ let mut chunk_data = Vec :: with_capacity ( MAX_CHUNK_LENGTH ) ;
392398 chunk_data. extend_from_slice ( MARKER ) ;
393399 chunk_data. push ( i as u8 + 1 ) ;
394400 chunk_data. push ( num_chunks as u8 ) ;
395401 chunk_data. extend_from_slice ( data) ;
396402
397- self . add_app_segment ( 2 , & chunk_data) ?;
403+ self . add_app_segment_internal ( 2 , chunk_data) ?;
398404 }
399405
400406 Ok ( ( ) )
0 commit comments