Commit 3828ea67b97fc56dead976f319792ead3aa7e623

Patrick Steinhardt 2020-02-21T11:26:19

deps: ntlmclient: fix missing htonll symbols on FreeBSD and SunOS The ntlmclient dependency defines htonll on Linux-based systems, only. As a result, non-Linux systems will run into compiler and/or linker errors due to undefined symbols. Fix this issue for FreeBSD, OpenBSD and SunOS/OpenSolaris by including the proper headers and defining the symbol accordingly.

diff --git a/deps/ntlmclient/compat.h b/deps/ntlmclient/compat.h
index efdf345..43bc865 100644
--- a/deps/ntlmclient/compat.h
+++ b/deps/ntlmclient/compat.h
@@ -22,8 +22,30 @@
 #endif
 
 #ifdef __linux__
+/* See man page endian(3) */
 # include <endian.h>
 # define htonll htobe64
+#elif defined(__OpenBSD__)
+/* See man page htobe64(3) */
+# include <endian.h>
+# define htonll htobe64
+#elif defined(__FreeBSD__)
+/* See man page bwaps64(9) */
+# include <sys/endian.h>
+# define htonll bswap64
+#elif defined(sun) || defined(__sun)
+/* See man page byteorder(3SOCKET) */
+# include <sys/types.h>
+# include <netinet/in.h>
+# include <inttypes.h>
+
+# if !defined(htonll)
+#  if defined(_BIG_ENDIAN)
+#   define htonll(x) (x)
+#  else
+#   define htonll(x) ((((uint64_t)htonl(x)) << 32) + htonl((uint64_t)(x) >> 32))
+#  endif
+# endif
 #endif
 
 #ifndef MIN