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; |
} |