Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 4730 → Rev 4731

/branches/network/uspace/srv/net/structures/packet/packet_client.c
71,7 → 71,7
 
int packet_trim( packet_t packet, size_t prefix, size_t suffix ){
if( ! packet_is_valid( packet )) return EINVAL;
if( prefix + suffix > packet->data_end - packet->data_start ) return ENOMEM;
if( prefix + suffix > PACKET_DATA_LENGTH( packet )) return ENOMEM;
packet->data_start += prefix;
packet->data_end -= suffix;
return EOK;
91,7 → 91,7
 
size_t packet_get_data_length( const packet_t packet ){
if( ! packet_is_valid( packet )) return 0;
return packet->data_end - packet->data_start;
return PACKET_DATA_LENGTH( packet );
}
 
void * packet_get_data( const packet_t packet ){
104,7 → 104,7
size_t allocated;
 
if( ! packet_is_valid( packet )) return EINVAL;
allocated = packet->dest_addr - packet->src_addr;
allocated = PACKET_MAX_ADDRESS_LENGTH( packet );
if( allocated < addr_len ) return ENOMEM;
padding = allocated - addr_len;
packet->addr_len = addr_len;
123,5 → 123,30
return EOK;
}
 
packet_t packet_get_copy( int phone, packet_t packet ){
packet_t copy;
uint8_t * src;
uint8_t * dest;
size_t addrlen;
 
if( ! packet_is_valid( packet )) return NULL;
// get a new packet
copy = packet_get_4( phone, PACKET_DATA_LENGTH( packet ), PACKET_MAX_ADDRESS_LENGTH( packet ), packet->max_prefix, PACKET_MIN_SUFFIX( packet ));
if( ! copy ) return NULL;
// get addresses
addrlen = packet_get_addr( packet, & src, & dest );
// copy data
if(( packet_copy_data( copy, packet_get_data( packet ), PACKET_DATA_LENGTH( packet )) == EOK )
// copy addresses if present
&& (( addrlen <= 0 ) || ( packet_set_addr( copy, src, dest, addrlen ) == EOK ))){
copy->order = packet->order;
copy->metric = packet->metric;
return copy;
}else{
pq_release( phone, copy->packet_id );
return NULL;
}
}
 
/** @}
*/