other: memcmp() is tiny bit quicker than strncmp()

With the large input samples I have use of memcmp makes run to take about
2-3% less time.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
Sami Kerola 2013-09-02 22:21:32 +01:00
parent 06ffa5ed04
commit 47582ed8d8

View file

@ -163,10 +163,10 @@ int
size_t len; size_t len;
/* Needed when dhcpd.conf has zero range definitions. */ /* Needed when dhcpd.conf has zero range definitions. */
if (config.dhcp_version == VERSION_UNKNOWN) { if (config.dhcp_version == VERSION_UNKNOWN) {
if (strncmp("lease ", str, 6)) { if (memcmp("lease ", str, 6)) {
config.dhcp_version = VERSION_4; config.dhcp_version = VERSION_4;
return PREFIX_LEASE; return PREFIX_LEASE;
} else if (strncmp(" iaaddr ", str, 9)) { } else if (memcmp(" iaaddr ", str, 9)) {
config.dhcp_version = VERSION_6; config.dhcp_version = VERSION_6;
return PREFIX_LEASE; return PREFIX_LEASE;
} }
@ -182,66 +182,66 @@ int
if (15 < len && config.dhcp_version == VERSION_4) { if (15 < len && config.dhcp_version == VERSION_4) {
switch (str[16]) { switch (str[16]) {
case 'f': case 'f':
if (!strncmp(" binding state free;", str, 21)) if (!memcmp(" binding state free;", str, 21))
return PREFIX_BINDING_STATE_FREE; return PREFIX_BINDING_STATE_FREE;
break; break;
case 'a': case 'a':
if (!strncmp(" binding state active;", str, 23)) if (!memcmp(" binding state active;", str, 23))
return PREFIX_BINDING_STATE_ACTIVE; return PREFIX_BINDING_STATE_ACTIVE;
if (!strncmp(" binding state abandoned;", str, 25)) if (!memcmp(" binding state abandoned;", str, 25))
return PREFIX_BINDING_STATE_ABANDONED; return PREFIX_BINDING_STATE_ABANDONED;
break; break;
case 'e': case 'e':
if (!strncmp(" binding state expired;", str, 24)) if (!memcmp(" binding state expired;", str, 24))
return PREFIX_BINDING_STATE_EXPIRED; return PREFIX_BINDING_STATE_EXPIRED;
break; break;
case 'r': case 'r':
if (!strncmp(" binding state released;", str, 25)) if (!memcmp(" binding state released;", str, 25))
return PREFIX_BINDING_STATE_RELEASED; return PREFIX_BINDING_STATE_RELEASED;
break; break;
case 'b': case 'b':
if (!strncmp(" binding state backup;", str, 23)) if (!memcmp(" binding state backup;", str, 23))
return PREFIX_BINDING_STATE_BACKUP; return PREFIX_BINDING_STATE_BACKUP;
break; break;
case 'n': case 'n':
if (!strncmp(" hardware ethernet", str, 19)) if (!memcmp(" hardware ethernet", str, 19))
return PREFIX_HARDWARE_ETHERNET; return PREFIX_HARDWARE_ETHERNET;
break; break;
} }
} else if (17 < len /* && config.dhcp_version == VERSION_6 */ ) { } else if (17 < len /* && config.dhcp_version == VERSION_6 */ ) {
switch (str[18]) { switch (str[18]) {
case 'f': case 'f':
if (!strncmp(" binding state free;", str, 23)) if (!memcmp(" binding state free;", str, 23))
return PREFIX_BINDING_STATE_FREE; return PREFIX_BINDING_STATE_FREE;
break; break;
case 'a': case 'a':
if (!strncmp(" binding state active;", str, 25)) if (!memcmp(" binding state active;", str, 25))
return PREFIX_BINDING_STATE_ACTIVE; return PREFIX_BINDING_STATE_ACTIVE;
if (!strncmp(" binding state abandoned;", str, 27)) if (!memcmp(" binding state abandoned;", str, 27))
return PREFIX_BINDING_STATE_ABANDONED; return PREFIX_BINDING_STATE_ABANDONED;
break; break;
case 'e': case 'e':
if (!strncmp(" binding state expired;", str, 26)) if (!memcmp(" binding state expired;", str, 26))
return PREFIX_BINDING_STATE_EXPIRED; return PREFIX_BINDING_STATE_EXPIRED;
break; break;
case 'r': case 'r':
if (!strncmp(" binding state released;", str, 27)) if (!memcmp(" binding state released;", str, 27))
return PREFIX_BINDING_STATE_RELEASED; return PREFIX_BINDING_STATE_RELEASED;
break; break;
case 'b': case 'b':
if (!strncmp(" binding state backup;", str, 25)) if (!memcmp(" binding state backup;", str, 25))
return PREFIX_BINDING_STATE_BACKUP; return PREFIX_BINDING_STATE_BACKUP;
break; break;
case 'n': case 'n':
if (!strncmp(" hardware ethernet", str, 19)) if (!memcmp(" hardware ethernet", str, 19))
return PREFIX_HARDWARE_ETHERNET; return PREFIX_HARDWARE_ETHERNET;
break; break;
} }
} }
if (config.dhcp_version == VERSION_4 && !strncmp("lease ", str, 6)) { if (config.dhcp_version == VERSION_4 && !memcmp("lease ", str, 6)) {
return PREFIX_LEASE; return PREFIX_LEASE;
} else if (config.dhcp_version == VERSION_6 } else if (config.dhcp_version == VERSION_6
&& !strncmp(" iaaddr ", str, 9)) { && !memcmp(" iaaddr ", str, 9)) {
return PREFIX_LEASE; return PREFIX_LEASE;
} }
return NUM_OF_PREFIX; return NUM_OF_PREFIX;