From 395be9a8fb85d172dcbb06826aed8b5b29ceeac2 Mon Sep 17 00:00:00 2001 From: "Schanzenbach, Martin" Date: Tue, 5 Feb 2019 07:16:19 +0100 Subject: [PATCH] - Fix build of ats transport plugin not linking against libgnunetnt - Add compat memrchr layer for Win32 and macOS --- po/POTFILES.in | 2 + src/ats/Makefile.am | 1 + src/gns/gnunet-service-gns_resolver.c | 19 ---------- src/include/compat.h | 54 +++++++++++++++++++++++++++ src/include/platform.h | 4 ++ src/util/Makefile.am | 3 +- src/util/proc_compat.c | 51 +++++++++++++++++++++++++ 7 files changed, 114 insertions(+), 20 deletions(-) create mode 100644 src/include/compat.h create mode 100644 src/util/proc_compat.c diff --git a/po/POTFILES.in b/po/POTFILES.in index a1d1713f9..0ee48fcde 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -517,6 +517,7 @@ src/util/os_network.c src/util/os_priority.c src/util/peer.c src/util/plugin.c +src/util/proc_compat.c src/util/program.c src/util/regex.c src/util/resolver_api.c @@ -539,6 +540,7 @@ src/vpn/vpn_api.c src/zonemaster/gnunet-service-zonemaster-monitor.c src/zonemaster/gnunet-service-zonemaster.c src/fs/fs_api.h +src/include/compat.h src/include/gnunet_common.h src/include/gnunet_mq_lib.h src/include/gnunet_time_lib.h diff --git a/src/ats/Makefile.am b/src/ats/Makefile.am index 4f2a93227..2a62d71bd 100644 --- a/src/ats/Makefile.am +++ b/src/ats/Makefile.am @@ -74,6 +74,7 @@ libgnunet_plugin_ats_proportional_la_LIBADD = \ libgnunetats.la \ $(top_builddir)/src/statistics/libgnunetstatistics.la \ $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/nt/libgnunetnt.la \ $(LTLIBINTL) libgnunet_plugin_ats_proportional_la_LDFLAGS = \ $(GN_PLUGIN_LDFLAGS) diff --git a/src/gns/gnunet-service-gns_resolver.c b/src/gns/gnunet-service-gns_resolver.c index 68c03edf1..703a0f652 100644 --- a/src/gns/gnunet-service-gns_resolver.c +++ b/src/gns/gnunet-service-gns_resolver.c @@ -624,25 +624,6 @@ timeout_resolution (void *cls) } -#if (defined WINDOWS) || (defined DARWIN) -/* Don't have this on W32, here's a naive implementation - * Was somehow removed on OS X ... */ -static void * -memrchr (const void *s, - int c, - size_t n) -{ - const unsigned char *ucs = s; - ssize_t i; - - for (i = n - 1; i >= 0; i--) - if (c == (int) ucs[i]) - return (void *) &ucs[i]; - return NULL; -} -#endif - - /** * Get the next, rightmost label from the name that we are trying to resolve, * and update the resolution position accordingly. Labels usually consist diff --git a/src/include/compat.h b/src/include/compat.h new file mode 100644 index 000000000..31a9760c5 --- /dev/null +++ b/src/include/compat.h @@ -0,0 +1,54 @@ +/* + This file is part of GNUnet. + Copyright (C) 2001, 2002, 2003, 2004, 2005 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later +*/ + +/** + * @author Martin Schanzenbach + * + * @file include/compat.h + * Definitions for macOS and Win32 + */ + +#ifndef _COMPAT_H +#define _COMPAT_H + +#ifdef __cplusplus +extern "C" +{ +#endif + + /** + * memrchr as defined in glibc + * + * @param s pointer to memory + * @param c character to search for + * @param n search character limit + */ +void* +GN_memrchr_ (const void *s, + int c, + size_t n); + +#define memrchr(s,c,n) GN_memrchr_(s,c,n) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/include/platform.h b/src/include/platform.h index e12c49888..b0a7c0a47 100644 --- a/src/include/platform.h +++ b/src/include/platform.h @@ -70,6 +70,10 @@ #define VERBOSE_STATS 0 +#if (defined WINDOWS) || (defined DARWIN) +#include "compat.h" +#endif + #ifdef CYGWIN #include #endif diff --git a/src/util/Makefile.am b/src/util/Makefile.am index fc5a4648c..625ff87a2 100644 --- a/src/util/Makefile.am +++ b/src/util/Makefile.am @@ -120,7 +120,8 @@ libgnunetutil_la_SOURCES = \ strings.c \ time.c \ tun.c \ - speedup.c speedup.h + speedup.c speedup.h \ + proc_compat.c if HAVE_LIBIDN LIBIDN= -lidn diff --git a/src/util/proc_compat.c b/src/util/proc_compat.c new file mode 100644 index 000000000..7abea446a --- /dev/null +++ b/src/util/proc_compat.c @@ -0,0 +1,51 @@ +/* + This file is part of GNUnet. + Copyright (C) 2001, 2002, 2003, 2004, 2005 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later +*/ +#include "platform.h" + +/** + * @author Martin Schanzenbach + * + * @file util/proc_compat.c + * Definitions for macOS and Win32 + */ + + +/** + * memrchr as defined in glibc + * + * @param s pointer to memory + * @param c character to search for + * @param n search character limit + */ +void* +GN_memrchr_ (const void *s, + int c, + size_t n) +{ + const unsigned char *ucs = s; + ssize_t i; + + for (i = n - 1; i >= 0; i--) + if (c == (int) ucs[i]) + return (void *) &ucs[i]; + return NULL; +} + + -- 2.25.1