mirror of
git://git.code.sf.net/p/dhcpd-pools/code
synced 2025-12-16 15:57:00 +00:00
(un)likely: use __builtin_expect to inform expected path
Remove also unnecessary comparison in getdata nth_field(). Signed-off-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
parent
6f179db03d
commit
acba2e265e
4 changed files with 25 additions and 3 deletions
14
configure.ac
14
configure.ac
|
|
@ -69,6 +69,20 @@ AC_CHECK_FUNCS([\
|
|||
strrchr \
|
||||
])
|
||||
|
||||
AC_MSG_CHECKING([if the compiler supports __builtin_expect])
|
||||
AC_TRY_COMPILE(, [
|
||||
return __builtin_expect(1, 1) ? 1 : 0
|
||||
], [
|
||||
have_builtin_expect=yes
|
||||
AC_MSG_RESULT([yes])
|
||||
], [
|
||||
have_builtin_expect=no
|
||||
AC_MSG_RESULT([no])
|
||||
])
|
||||
if test x$have_builtin_expect = xyes ; then
|
||||
AC_DEFINE([HAVE_BUILTIN_EXPECT], [1], [Define to 1 if the compiler supports __builtin_expect.])
|
||||
fi
|
||||
|
||||
AC_CONFIG_FILES([Makefile
|
||||
lib/Makefile
|
||||
man/Makefile
|
||||
|
|
|
|||
|
|
@ -93,6 +93,14 @@ inline char *prog_inv_sh_nm_from_file(char *f, char stripext)
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_BUILTIN_EXPECT
|
||||
# define likely(x) __builtin_expect(!!(x), 1)
|
||||
# define unlikely(x) __builtin_expect(!!(x), 0)
|
||||
#else
|
||||
# define likely(x) (x)
|
||||
# define unlikely(x) (x)
|
||||
#endif
|
||||
|
||||
/* Structures and unions */
|
||||
struct configuration_t {
|
||||
char *dhcpdconf_file;
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ void nth_field(char *restrict dest, const char *restrict src)
|
|||
len = strlen(src);
|
||||
for (i = 0; i < len; i++) {
|
||||
dest[i] = src[i];
|
||||
if (src[i] == ' ' || dest[i] == '\0') {
|
||||
if (unlikely(src[i] == ' ')) {
|
||||
dest[i] = '\0';
|
||||
break;
|
||||
}
|
||||
|
|
@ -233,7 +233,7 @@ void parse_config(int is_include, const char *restrict config_file,
|
|||
#endif /* POSIX_FADV_SEQUENTIAL */
|
||||
|
||||
/* Very hairy stuff begins. */
|
||||
while (!feof(dhcpd_config)) {
|
||||
while (unlikely(!feof(dhcpd_config))) {
|
||||
c = fgetc(dhcpd_config);
|
||||
/* Certain characters are magical */
|
||||
switch (c) {
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ int
|
|||
int i;
|
||||
/* two spaces are very common in lease file, after them
|
||||
* nearly everything differs */
|
||||
if (a[2] != b[2]) {
|
||||
if (likely(a[2] != b[2])) {
|
||||
return false;
|
||||
}
|
||||
/* " binding state " == 16 chars, this will skip right
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue