- i_data += i_copy;
- p_access->info.i_pos += i_copy;
- }
- else if( p_sys->i_packet_used < p_sys->i_packet_length )
- {
- i_copy = __MIN( p_sys->i_packet_length - p_sys->i_packet_used,
- i_len - i_data );
- memcpy( &p_buffer[i_data],
- &p_sys->p_packet[p_sys->i_packet_used],
- i_copy );
-
- i_data += i_copy;
- p_sys->i_packet_used += i_copy;
- p_access->info.i_pos += i_copy;
- }
- else if( (p_sys->i_packet_length > 0) &&
- ((int)p_sys->i_packet_used < p_sys->asfh.i_min_data_packet_size) )
- {
- i_copy = __MIN( p_sys->asfh.i_min_data_packet_size - p_sys->i_packet_used,
- i_len - i_data );
- memset( &p_buffer[i_data], 0, i_copy );
+ if( p_sys->i_packet_used < p_sys->i_packet_length )
+ i_copy = p_sys->i_packet_length - p_sys->i_packet_used;
+ if( __MAX( p_sys->i_packet_used, p_sys->i_packet_length ) < i_packet_min )
+ i_padding = i_packet_min - __MAX( p_sys->i_packet_used, p_sys->i_packet_length );
+
+ block_t *p_block = block_New( p_access, i_copy + i_padding );
+ if( !p_block )
+ return NULL;
+
+ if( i_copy > 0 )
+ memcpy( &p_block->p_buffer[0], &p_sys->p_packet[p_sys->i_packet_used], i_copy );
+ if( i_padding > 0 )
+ memset( &p_block->p_buffer[i_copy], 0, i_padding );