compat: add lfind
authorVictorien Le Couviour--Tuffet <victorien.lecouviour.tuffet@gmail.com>
Tue, 2 Oct 2018 13:42:02 +0000 (15:42 +0200)
committerThomas Guillem <thomas@gllm.fr>
Tue, 23 Oct 2018 12:53:25 +0000 (14:53 +0200)
Fixes android build with NDK 17 as lfind is not always available.

compat/lfind.c [new file with mode: 0644]
configure.ac
include/vlc_fixups.h

diff --git a/compat/lfind.c b/compat/lfind.c
new file mode 100644 (file)
index 0000000..d62b2cf
--- /dev/null
@@ -0,0 +1,19 @@
+/*****************************************************************************
+ * lfind.c : implement lfind
+ *****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+void *lfind(const void *key, const void *base, size_t *nmemb,
+            size_t size, int(*cmp)(const void *, const void *))
+{
+    for (int i = 0; i < *nmemb; ++i)
+    {
+        const void *elem = base + i * size;
+        if (!cmp(key, elem))
+            return elem;
+    }
+    return NULL;
+}
index 9066dd7..c1abf7d 100644 (file)
@@ -581,7 +581,7 @@ need_libc=false
 
 dnl Check for usual libc functions
 AC_CHECK_FUNCS([accept4 daemon fcntl flock fstatvfs fork getenv getpwuid_r isatty memalign mkostemp mmap open_memstream newlocale openat pipe2 pread posix_fadvise posix_madvise posix_memalign setlocale stricmp strnicmp strptime uselocale])
-AC_REPLACE_FUNCS([aligned_alloc atof atoll dirfd fdopendir flockfile fsync getdelim getpid lldiv memrchr nrand48 poll recvmsg rewind sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup strnlen strnstr strsep strtof strtok_r strtoll swab tdestroy tfind timegm timespec_get strverscmp pathconf])
+AC_REPLACE_FUNCS([aligned_alloc atof atoll dirfd fdopendir flockfile fsync getdelim getpid lfind lldiv memrchr nrand48 poll recvmsg rewind sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup strnlen strnstr strsep strtof strtok_r strtoll swab tdestroy tfind timegm timespec_get strverscmp pathconf])
 AC_REPLACE_FUNCS([gettimeofday])
 AC_CHECK_FUNC(fdatasync,,
   [AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync() if missing.])
index 87394fc..caf1768 100644 (file)
@@ -486,6 +486,8 @@ void *tsearch( const void *key, void **rootp, int(*cmp)(const void *, const void
 void *tfind( const void *key, const void **rootp, int(*cmp)(const void *, const void *) );
 void *tdelete( const void *key, void **rootp, int(*cmp)(const void *, const void *) );
 void twalk( const void *root, void(*action)(const void *nodep, VISIT which, int depth) );
+void *lfind( const void *key, const void *base, size_t *nmemb,
+             size_t size, int(*cmp)(const void *, const void *) );
 #endif /* HAVE_SEARCH_H */
 #ifndef HAVE_TDESTROY
 void tdestroy( void *root, void (*free_node)(void *nodep) );