Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 4394 → Rev 4395

/branches/network/uspace/srv/net/structures/packet/packet_client.c
85,10 → 85,10
}
 
int packet_get_addr( const packet_t packet, uint8_t ** src, uint8_t ** dest ){
if( !( packet_is_valid( packet ) && src && dest )) return EINVAL;
if( ! packet_is_valid( packet )) return EINVAL;
if( ! packet->addr_len ) return 0;
* src = ( void * ) packet + packet->src_addr;
* dest = ( void * ) packet + packet->dest_addr;
if( src ) * src = ( void * ) packet + packet->src_addr;
if( dest ) * dest = ( void * ) packet + packet->dest_addr;
return packet->addr_len;
}
 
104,21 → 104,24
 
int packet_set_addr( packet_t packet, const uint8_t * src, const uint8_t * dest, size_t addr_len ){
size_t padding;
size_t allocated;
 
if( ! packet_is_valid( packet )) return EINVAL;
if( packet->addr_len < addr_len ) return ENOMEM;
padding = packet->addr_len - addr_len;
allocated = packet->dest_addr - packet->src_addr;
if( allocated < addr_len ) return ENOMEM;
padding = allocated - addr_len;
packet->addr_len = addr_len;
if( src ){
memcpy(( void * ) packet + packet->src_addr, src, addr_len );
if( padding ) bzero(( void * ) packet + packet->src_addr + addr_len, padding );
}else{
bzero(( void * ) packet + packet->src_addr + addr_len, packet->addr_len );
bzero(( void * ) packet + packet->src_addr, allocated );
}
if( dest ){
memcpy(( void * ) packet + packet->dest_addr, dest, addr_len );
if( padding ) bzero(( void * ) packet + packet->dest_addr + addr_len, padding );
}else{
bzero(( void * ) packet + packet->dest_addr + addr_len, packet->addr_len );
bzero(( void * ) packet + packet->dest_addr, allocated );
}
return EOK;
}