From 46cd39cabb4579f12ddbed309ac16b47fe40a9d7 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Thu, 1 Feb 2018 09:34:12 +0000 Subject: [PATCH] changed configure.ac to check the offset of sa_family in struct sockaddr --- qse/configure | 36 ++++++++++++++++++++++++++++++++++++ qse/configure.ac | 18 ++++++++++++++++++ qse/include/qse/config.h.in | 3 +++ qse/include/qse/si/nwad.h | 8 +++++++- qse/lib/si/nwad-skad.c | 2 +- 5 files changed, 65 insertions(+), 2 deletions(-) diff --git a/qse/configure b/qse/configure index 0d382a07..58f4e37a 100755 --- a/qse/configure +++ b/qse/configure @@ -22344,6 +22344,25 @@ $as_echo "#define QSE_SA_FAMILY_T_IS_SIGNED 1" >>confdefs.h fi fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking offset of sa_family in struct sockaddr" >&5 +$as_echo_n "checking offset of sa_family in struct sockaddr... " >&6; } + if ac_fn_c_compute_int "$LINENO" "offsetof(struct sockaddr, sa_family)" "ac_cv_offsetof_sa_family" "#include + #include + #include "; then : + +else + ac_cv_offsteof_sa_family=0 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_offsetof_sa_family" >&5 +$as_echo "$ac_cv_offsetof_sa_family" >&6; } + +cat >>confdefs.h <<_ACEOF +#define QSE_OFFSETOF_SA_FAMILY ${ac_cv_offsetof_sa_family} +_ACEOF + + else # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects @@ -22690,6 +22709,23 @@ $as_echo "#define QSE_SA_FAMILY_T_IS_SIGNED 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking offset of sa_family in struct sockaddr" >&5 +$as_echo_n "checking offset of sa_family in struct sockaddr... " >&6; } + if ac_fn_c_compute_int "$LINENO" "offsetof(struct sockaddr, sa_family)" "ac_cv_offsetof_sa_family" "#include + #include + #include "; then : + +else + ac_cv_offsteof_sa_family=0 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_offsetof_sa_family" >&5 +$as_echo "$ac_cv_offsetof_sa_family" >&6; } + +cat >>confdefs.h <<_ACEOF +#define QSE_OFFSETOF_SA_FAMILY ${ac_cv_offsetof_sa_family} +_ACEOF + fi diff --git a/qse/configure.ac b/qse/configure.ac index b8af58f9..c1e43ab9 100644 --- a/qse/configure.ac +++ b/qse/configure.ac @@ -463,6 +463,16 @@ then [#include #include ]) fi + + AC_MSG_CHECKING([offset of sa_family in struct sockaddr]) + AC_COMPUTE_INT([ac_cv_offsetof_sa_family], + [[offsetof(struct sockaddr, sa_family)]], + [#include + #include + #include ], [ac_cv_offsteof_sa_family=0]) + AC_MSG_RESULT([$ac_cv_offsetof_sa_family]) + AC_DEFINE_UNQUOTED(QSE_OFFSETOF_SA_FAMILY, ${ac_cv_offsetof_sa_family}, [offsetof(struct sockaddr, sa_family)]) + else AC_CHECK_SIZEOF(struct sockaddr_in,,[ #include @@ -510,6 +520,14 @@ else #include ]) fi + AC_MSG_CHECKING([offset of sa_family in struct sockaddr]) + AC_COMPUTE_INT([ac_cv_offsetof_sa_family], + [[offsetof(struct sockaddr, sa_family)]], + [#include + #include + #include ], [ac_cv_offsteof_sa_family=0]) + AC_MSG_RESULT([$ac_cv_offsetof_sa_family]) + AC_DEFINE_UNQUOTED(QSE_OFFSETOF_SA_FAMILY, ${ac_cv_offsetof_sa_family}, [offsetof(struct sockaddr, sa_family)]) fi diff --git a/qse/include/qse/config.h.in b/qse/include/qse/config.h.in index 20e8f74a..c46552ac 100644 --- a/qse/include/qse/config.h.in +++ b/qse/include/qse/config.h.in @@ -936,6 +936,9 @@ /* Define if mode_t is signed */ #undef QSE_MODE_T_IS_SIGNED +/* offsetof(struct sockaddr, sa_family) */ +#undef QSE_OFFSETOF_SA_FAMILY + /* Author */ #undef QSE_PACKAGE_AUTHOR diff --git a/qse/include/qse/si/nwad.h b/qse/include/qse/si/nwad.h index 23e7b472..b626bbfa 100644 --- a/qse/include/qse/si/nwad.h +++ b/qse/include/qse/si/nwad.h @@ -197,7 +197,13 @@ struct qse_skad_t /* TODO: is this large enough?? */ union { - qse_skaf_t family; + struct + { + #if defined(QSE_OFFSETOF_SA_FAMILY) && (QSE_OFFSET_OF_SA_FAMILY > 0) + qse_uint8_t filler[QSE_OFFSETOF_SA_FAMILY]; + #endif + qse_skaf_t family; + } sa; qse_uint8_t data[QSE_SKAD_DATA_SIZE]; } u; diff --git a/qse/lib/si/nwad-skad.c b/qse/lib/si/nwad-skad.c index 3923ce76..d6007c8e 100644 --- a/qse/lib/si/nwad-skad.c +++ b/qse/lib/si/nwad-skad.c @@ -106,7 +106,7 @@ typedef union sockaddr_t sockaddr_t; #endif */ -#define FAMILY(x) (((qse_skad_t*)x)->u.family) +#define FAMILY(x) (((qse_skad_t*)x)->u.sa.family) static QSE_INLINE int skad_to_nwad (const sockaddr_t* skad, qse_nwad_t* nwad) {