]> arthur.barton.de Git - ngircd-alex.git/commitdiff
Add own memmove() implementation
authorAlexander Barton <alex@barton.de>
Sun, 29 Jan 2017 21:33:23 +0000 (22:33 +0100)
committerAlexander Barton <alex@barton.de>
Sun, 25 Feb 2018 02:17:21 +0000 (03:17 +0100)
This is required for SunOS 4.1.4 aka Solaris 1.1.
Thanks to Götz Hoffart for testing!

configure.ng
src/portab/Makefile.ng
src/portab/memmove.c [new file with mode: 0644]

index 57ae8bb8e66d1aba58cb84ac0fd136c4b2558fe1..da1c7c2f102947b8254405c72a77ce03f7109517 100644 (file)
@@ -207,10 +207,8 @@ AC_CHECK_MEMBER([struct sockaddr_in.sin_len], AC_DEFINE(HAVE_sockaddr_in_len),,
 
 # -- Libraries --
 
-# memmove: A/UX libUTIL
-AC_SEARCH_LIBS([memmove], [UTIL], [], [
-       AC_MSG_ERROR([unable to find the memmove() function])
-])
+# memmove: A/UX libUTIL; but we can use our own implementation.
+AC_SEARCH_LIBS([memmove], [UTIL])
 # gethostbyname: Solaris libnsl
 AC_SEARCH_LIBS([gethostbyname], [bind nsl network], [], [
        AC_MSG_ERROR([unable to find the gethostbyname() function])
@@ -235,7 +233,6 @@ AC_CHECK_FUNCS([ \
                gethostname \
                gettimeofday \
                inet_ntoa \
-               memmove \
                memset \
                setsid \
                socket \
@@ -257,6 +254,7 @@ AC_CHECK_FUNCS_ONCE([
        gai_strerror \
        getnameinfo \
        inet_aton \
+       memmove \
        setgroups \
        sigaction \
        sigprocmask \
index 30b77fc3e532fd4f71c334238b298b29d8b9dab9..206cc774645d40e4e2578a862cb8165718887761 100644 (file)
@@ -16,6 +16,7 @@ EXTRA_DIST = Makefile.ng
 noinst_LIBRARIES = libngportab.a
 
 libngportab_a_SOURCES = \
+       memmove.c \
        strdup.c \
        strlcpy.c \
        strndup.c \
diff --git a/src/portab/memmove.c b/src/portab/memmove.c
new file mode 100644 (file)
index 0000000..60aa126
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * ngIRCd -- The Next Generation IRC Daemon
+ */
+
+#include "portab.h"
+
+/**
+ * @file
+ * memmove() implementation.
+ * Source: http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=ansi
+ */
+
+#ifndef HAVE_MEMMOVE
+
+GLOBAL void *
+memmove(void *dest, void const *src, size_t n)
+{
+       register char *dp = dest;
+       register char const *sp = src;
+       if(dp < sp) {
+               while(n-- > 0)
+                       *dp++ = *sp++;
+       } else {
+               dp += n;
+               sp += n;
+               while(n-- > 0)
+                       *--dp = *--sp;
+       }
+
+       return dest;
+}
+
+#endif