+ /* Should be really rare, near 0 */
+ if( i_read < i_size && b_force )
+ {
+ data_packet_t *p_old = p_pk;
+ int i_missing = i_size - i_read;
+
+ p_pk = input_NewPacket( s->p_input->p_method_data, i_size );
+ if( p_pk == NULL )
+ {
+ input_DeletePacket( s->p_input->p_method_data, p_old );
+ return NULL;
+ }
+ p_pk->p_payload_end = p_pk->p_payload_start + i_size;
+ memcpy( p_pk->p_payload_start, p_old->p_payload_start, i_read );
+ input_DeletePacket( s->p_input->p_method_data, p_old );
+
+ if( stream_Read( s, &p_pk->p_payload_start[i_read], i_missing ) < i_missing )
+ {
+ input_DeletePacket( s->p_input->p_method_data, p_pk );
+ return NULL;
+ }
+ }
+
+ return p_pk;
+}