Ethereal-dev: [Ethereal-dev] Performance - efficient coding of dissectors - examples
Examples where static const array would have been more efficient:
1. packet-ip.c:
switch (icmp_type) {
case ICMP_ECHOREPLY:
strcpy(type_str, "Echo (ping) reply");
break;
case ICMP_UNREACH:
strcpy(type_str, "Destination unreachable");
if (icmp_code < N_UNREACH) {
sprintf(code_str, "(%s)", unreach_str[icmp_code]);
} else {
strcpy(code_str, "(Unknown - error?)");
}
break;
2. packet-quakeworld.c: strcpy(command, "Ping");
3 .packet-fc.c:
static gchar *
fctl_to_str (const guint8 *fctl, gchar *str, gboolean is_ack)
{
int stroff = 0;
guint8 tmp = 0;
if (str == NULL)
return (str);
if (fctl[2] & 0x80) {
strcpy (str, "Exchange Responder, ");
stroff += 20;
}
else {
strcpy (str, "Exchange Originator, ");
stroff += 21;
}
if (fctl[2] & 0x40) {
strcpy (&str[stroff], "Seq Recipient, ");
stroff += 15;
}
4. packet-dns.c:
dns_class_name() function and the whole use of it.
Examples where proto_tree_add_xxxx should have been used instead of
proto_tree_add_text():
packet-atm.c:
case TAG_MAC_ADDRESS:
proto_tree_add_text(dest_tree, tvb, offset, 6, "MAC address: %s"
ether_to_str(tvb_get_ptr(tvb, offset, 6)));
break;
or, same file:
proto_tree_add_text(tree, tvb, offset, 1, "Number of TLVs: %u", num_tlvs);
packet-dhcpv6.c:
ti = proto_tree_add_text(bp_tree, tvb, off, 4 + optlen,
"%s", val_to_str(opttype, opttype_vals, "DHCP option %u"));
packet-dns.c
packet-eap.c:
proto_tree_add_text(eap_tree, tvb, offset, 1, "MS-CHAPv2-ID: %d",
tvb_get_guint8(tvb, offset));
packet-http.c:
proto_tree_add_text(chunk_subtree, tvb, offset,
chunk_offset - offset, "Chunk size: %u octets",
chunk_size);
packet-icmpv6.c:
proto_tree_add_text(icmp6opt_tree, tvb,
offset + offsetof(struct nd_opt_prefix_info, nd_opt_pi_prefix_len),
1, "Prefix length: %u", pi->nd_opt_pi_prefix_len);
Examples of defining variables inside loops (I agree, any normal
compiler would put it outside the loop somehow, but still):
packet-tcp.c:
for(tmptnp=*tnp;tmptnp;tmptnp=tmptnp->next){
if(tmptnp->nxtpdu<=seq){
struct tcp_next_pdu *oldtnp;
...
Those are all just random examples, I might have got some wrong, and I
skipped zillions.