Browse Source

[Project] Detect memrchr in systems that supports it

tags/2.6
Vsevolod Stakhov 3 years ago
parent
commit
1a634c3d51
5 changed files with 14 additions and 5 deletions
  1. 1
    0
      CMakeLists.txt
  2. 2
    0
      cmake/OSDep.cmake
  3. 1
    0
      config.h.in
  4. 5
    4
      src/libutil/str_util.c
  5. 5
    1
      src/libutil/str_util.h

+ 1
- 0
CMakeLists.txt View File

CHECK_SYMBOL_EXISTS(sched_yield "sched.h" HAVE_SCHED_YIELD) CHECK_SYMBOL_EXISTS(sched_yield "sched.h" HAVE_SCHED_YIELD)
CHECK_SYMBOL_EXISTS(__get_cpuid "cpuid.h" HAVE_GET_CPUID) CHECK_SYMBOL_EXISTS(__get_cpuid "cpuid.h" HAVE_GET_CPUID)
CHECK_SYMBOL_EXISTS(nftw "sys/types.h;ftw.h" HAVE_NFTW) CHECK_SYMBOL_EXISTS(nftw "sys/types.h;ftw.h" HAVE_NFTW)
CHECK_SYMBOL_EXISTS(memrchr "string.h" HAVE_MEMRCHR)
IF(ENABLE_PCRE2 MATCHES "ON") IF(ENABLE_PCRE2 MATCHES "ON")
LIST(APPEND CMAKE_REQUIRED_INCLUDES "${PCRE_INCLUDE}") LIST(APPEND CMAKE_REQUIRED_INCLUDES "${PCRE_INCLUDE}")
CHECK_SYMBOL_EXISTS(PCRE2_CONFIG_JIT "pcre2.h" HAVE_PCRE_JIT) CHECK_SYMBOL_EXISTS(PCRE2_CONFIG_JIT "pcre2.h" HAVE_PCRE_JIT)

+ 2
- 0
cmake/OSDep.cmake View File

# Platform specific configuration # Platform specific configuration
IF(CMAKE_SYSTEM_NAME MATCHES "^.*BSD$|DragonFly") IF(CMAKE_SYSTEM_NAME MATCHES "^.*BSD$|DragonFly")
ADD_COMPILE_OPTIONS(-DFREEBSD -D_BSD_SOURCE) ADD_COMPILE_OPTIONS(-DFREEBSD -D_BSD_SOURCE)
SET(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_BSD_SOURCE")
CONFIGURE_FILE(freebsd/rspamd.sh.in freebsd/rspamd @ONLY) CONFIGURE_FILE(freebsd/rspamd.sh.in freebsd/rspamd @ONLY)
MESSAGE(STATUS "Configuring for BSD system") MESSAGE(STATUS "Configuring for BSD system")
# Find util library # Find util library


IF(CMAKE_SYSTEM_NAME STREQUAL "Linux") IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
ADD_COMPILE_OPTIONS(-D_GNU_SOURCE -DLINUX) ADD_COMPILE_OPTIONS(-D_GNU_SOURCE -DLINUX)
SET(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_GNU_SOURCE")
# Workaround with architecture specific includes # Workaround with architecture specific includes
#IF(IS_DIRECTORY "/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/") #IF(IS_DIRECTORY "/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/")
# INCLUDE_DIRECTORIES("/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/") # INCLUDE_DIRECTORIES("/usr/include/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/")

+ 1
- 0
config.h.in View File

#cmakedefine HAVE_MACHINE_ENDIAN_H 1 #cmakedefine HAVE_MACHINE_ENDIAN_H 1
#cmakedefine HAVE_MAXPATHLEN 1 #cmakedefine HAVE_MAXPATHLEN 1
#cmakedefine HAVE_FMEMOPEN 1 #cmakedefine HAVE_FMEMOPEN 1
#cmakedefine HAVE_MEMRCHR 1
#cmakedefine HAVE_MEMSET_S 1 #cmakedefine HAVE_MEMSET_S 1
#cmakedefine HAVE_MKSTEMP 1 #cmakedefine HAVE_MKSTEMP 1
#cmakedefine HAVE_MMAP_ANON 1 #cmakedefine HAVE_MMAP_ANON 1

+ 5
- 4
src/libutil/str_util.c View File

ucl_object_emit_full (obj, emit_type, &func, comments); ucl_object_emit_full (obj, emit_type, &func, comments);
} }


const void *
#ifndef HAVE_MEMRCHR
void *
rspamd_memrchr (const void *m, gint c, gsize len) rspamd_memrchr (const void *m, gint c, gsize len)
{ {
const guint8 *p = m; const guint8 *p = m;
gsize i;


for (i = len; i > 0; i --) {
for (gsize i = len; i > 0; i --) {
if (p[i - 1] == c) { if (p[i - 1] == c) {
return p + i - 1;
return (void *)(p + i - 1);
} }
} }


return NULL; return NULL;
} }
#endif


struct UConverter * struct UConverter *
rspamd_get_utf8_converter (void) rspamd_get_utf8_converter (void)

+ 5
- 1
src/libutil/str_util.h View File

* @param len * @param len
* @return pointer to the last occurrence or NULL * @return pointer to the last occurrence or NULL
*/ */
const void *rspamd_memrchr (const void *m, gint c, gsize len);
#ifdef HAVE_MEMRCHR
#define rspamd_memrchr memrchr
#else
void *rspamd_memrchr (const void *m, gint c, gsize len);
#endif


/** /**
* Return length of memory segment starting in `s` that contains no chars from `e` * Return length of memory segment starting in `s` that contains no chars from `e`

Loading…
Cancel
Save