summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyo Nakamura <upa@haeena.net>2024-02-12 00:54:28 +0900
committerRyo Nakamura <upa@haeena.net>2024-02-12 00:54:28 +0900
commit4e895bb72e035c7c5034dd8beca7c8497413ad9e (patch)
treebe39e85747a3f3562ce49032a39f2c87614dc640
parentf1522368446310ab697e2a60cd69119d741cf7cf (diff)
add htonll and ntohll
-rw-r--r--CMakeLists.txt5
-rw-r--r--include/config.h.in13
-rw-r--r--src/platform.c3
-rw-r--r--src/platform.h25
4 files changed, 45 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5fd554f..f8871cc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -91,11 +91,14 @@ endif()
# Symbol check
-check_symbol_exists(strlcat string.h HAVE_STRLCAT)
+check_symbol_exists(htonll arpa/inet.h HAVE_HTONLL)
+check_symbol_exists(ntohll arpa/inet.h HAVE_NTOHLL)
+check_symbol_exists(strlcat string.h HAVE_STRLCAT)
if (NOT HAVE_STRLCAT)
list(APPEND OPENBSD_COMPAT_SRC src/openbsd-compat/strlcat.c)
endif()
+
# generate config.h in build dir
configure_file(
${mscp_SOURCE_DIR}/include/config.h.in
diff --git a/include/config.h.in b/include/config.h.in
index e45dec8..86c6a24 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -9,4 +9,17 @@
/* Define to 1 if you have the strlcat function. */
#cmakedefine HAVE_STRLCAT 1
+/* Define to 1 if you have the htonll function. */
+#cmakedefine HAVE_HTONLL 1
+
+/* Define to 1 if you have the ntohll function. */
+#cmakedefine HAVE_NTOHLL 1
+
+/* Define to 1 if you have the bswap_64 function. */
+#cmakedefine HAVE_BSWAP_64 1
+
+/* Define to 1 if you have the bswap64 function. */
+#cmakedefine HAVE_BSWAP64 1
+
+
#endif /* _CONFIG_H_ */
diff --git a/src/platform.c b/src/platform.c
index aace709..96bbf68 100644
--- a/src/platform.c
+++ b/src/platform.c
@@ -22,6 +22,7 @@
#error unsupported platform
#endif
+#include <config.h>
#include <platform.h>
#include <strerrno.h>
#include <print.h>
@@ -163,3 +164,5 @@ int sem_release(sem_t *sem)
}
#endif
+
+
diff --git a/src/platform.h b/src/platform.h
index d47d620..f26e86c 100644
--- a/src/platform.h
+++ b/src/platform.h
@@ -4,6 +4,7 @@
#include <pthread.h>
#include <semaphore.h>
+#include <stdint.h>
int nr_cpus(void);
int set_thread_affinity(pthread_t tid, int core);
@@ -20,4 +21,28 @@ int setutimes(const char *path, struct timespec atime, struct timespec mtime);
sem_t *sem_create(int value);
int sem_release(sem_t *sem);
+
+#ifdef HAVE_HTONLL
+#include <arpa/inet.h> /* Apple has htonll and ntohll in arpa/inet.h */
+#endif
+
+/* copied from libssh: libssh/include/libssh/priv.h*/
+#ifndef HAVE_HTONLL
+# ifdef WORDS_BIGENDIAN
+# define htonll(x) (x)
+# else
+# define htonll(x) \
+ (((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32))
+# endif
+#endif
+
+#ifndef HAVE_NTOHLL
+# ifdef WORDS_BIGENDIAN
+# define ntohll(x) (x)
+# else
+# define ntohll(x) \
+ (((uint64_t)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32))
+# endif
+#endif
+
#endif /* _PLATFORM_H_ */