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 \
|
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
|
AC_CONFIG_FILES([Makefile
|
||||||
lib/Makefile
|
lib/Makefile
|
||||||
man/Makefile
|
man/Makefile
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,14 @@ inline char *prog_inv_sh_nm_from_file(char *f, char stripext)
|
||||||
# endif
|
# endif
|
||||||
#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 */
|
/* Structures and unions */
|
||||||
struct configuration_t {
|
struct configuration_t {
|
||||||
char *dhcpdconf_file;
|
char *dhcpdconf_file;
|
||||||
|
|
|
||||||
|
|
@ -175,7 +175,7 @@ void nth_field(char *restrict dest, const char *restrict src)
|
||||||
len = strlen(src);
|
len = strlen(src);
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
dest[i] = src[i];
|
dest[i] = src[i];
|
||||||
if (src[i] == ' ' || dest[i] == '\0') {
|
if (unlikely(src[i] == ' ')) {
|
||||||
dest[i] = '\0';
|
dest[i] = '\0';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -233,7 +233,7 @@ void parse_config(int is_include, const char *restrict config_file,
|
||||||
#endif /* POSIX_FADV_SEQUENTIAL */
|
#endif /* POSIX_FADV_SEQUENTIAL */
|
||||||
|
|
||||||
/* Very hairy stuff begins. */
|
/* Very hairy stuff begins. */
|
||||||
while (!feof(dhcpd_config)) {
|
while (unlikely(!feof(dhcpd_config))) {
|
||||||
c = fgetc(dhcpd_config);
|
c = fgetc(dhcpd_config);
|
||||||
/* Certain characters are magical */
|
/* Certain characters are magical */
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ int
|
||||||
int i;
|
int i;
|
||||||
/* two spaces are very common in lease file, after them
|
/* two spaces are very common in lease file, after them
|
||||||
* nearly everything differs */
|
* nearly everything differs */
|
||||||
if (a[2] != b[2]) {
|
if (likely(a[2] != b[2])) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* " binding state " == 16 chars, this will skip right
|
/* " binding state " == 16 chars, this will skip right
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue