From 75cb44bc90577c3487458564ca803163681319f1 Mon Sep 17 00:00:00 2001 From: Gerhard Rieger Date: Sat, 13 Aug 2022 16:53:11 +0200 Subject: [PATCH] Correction of getprotobynumber_r() variant detection (musl libc) --- CHANGES | 4 ++++ configure.ac | 6 +++--- fdname.c | 8 ++++++-- filan.c | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index 195eb6a..716680c 100644 --- a/CHANGES +++ b/CHANGES @@ -43,6 +43,10 @@ Porting: IP_ADD_SOURCE_MEMBERSHIP but not struct ip_mreq_source Thanks to Justin Yackoski for sending a patch. + configure.ac's detection of getprotobynumber_r() variant did not + recognize if this function does not exist, e.g. on Musl libc. + Thanks to Alexander Kanavin and Baruch Siach for sending patches. + Testing: Unset SOCAT_MAIN_WAIT on informational Socat calls diff --git a/configure.ac b/configure.ac index d4acc9e..973a7f2 100644 --- a/configure.ac +++ b/configure.ac @@ -137,13 +137,13 @@ AC_MSG_RESULT($sc_cv_have_prototype_hstrerror) # getprotobynumber_r() is not standardized AC_MSG_CHECKING(for getprotobynumber_r() variant) AC_CACHE_VAL(sc_cv_getprotobynumber_r, -[AC_TRY_COMPILE([#include +[AC_TRY_LINK([#include #include ],[getprotobynumber_r(1,NULL,NULL,1024,NULL);], [sc_cv_getprotobynumber_r=1; tmp_bynum_variant=Linux], - [AC_TRY_COMPILE([#include + [AC_TRY_LINK([#include #include ],[getprotobynumber_r(1,NULL,NULL,1024);], [sc_cv_getprotobynumber_r=2; tmp_bynum_variant=Solaris], - [AC_TRY_COMPILE([#include + [AC_TRY_LINK([#include #include ],[getprotobynumber_r(1,NULL,NULL);], [sc_cv_getprotobynumber_r=3; tmp_bynum_variant=AIX], diff --git a/fdname.c b/fdname.c index b076c3b..c7931a0 100644 --- a/fdname.c +++ b/fdname.c @@ -261,8 +261,12 @@ int sockname(int fd, FILE *outfile, char style) { } strncpy(protoname, protoentp->p_name, sizeof(protoname)); #elif HAVE_GETPROTOBYNUMBER_R==2 /* Solaris */ - protoentp = getprotobynumber(proto); - strncpy(protoname, protoentp->p_name, sizeof(protoname)); + { +# define FILAN_GETPROTOBYNUMBER_R_BUFLEN 1024 + char buffer[FILAN_GETPROTOBYNUMBER_R_BUFLEN]; + protoentp = getprotobynumber_r(proto, &protoent, buffer, FILAN_GETPROTOBYNUMBER_R_BUFLEN); + strncpy(protoname, protoentp->p_name, sizeof(protoname)); + } #elif HAVE_GETPROTOBYNUMBER_R==3 /* AIX */ { struct protoent_data proto_data; diff --git a/filan.c b/filan.c index a733a0a..6403b45 100644 --- a/filan.c +++ b/filan.c @@ -917,7 +917,7 @@ int tcpan2(int fd, FILE *outfile) { fd, &tcpinfo, sizeof(tcpinfo), strerror(errno)); return -1; } - fprintf(outfile, "%s={%u}\t", "TCPI_STATE", tcpinfo.tcpi_state); + fprintf(outfile, "%s={%u}\t", "TCPI_STATE", tcpinfo.tcpi_state); #if 0 /* on BSD these components are prefixed with __ - I get tired... */ fprintf(outfile, "%s={%u}\t", "TCPI_CA_STATE", tcpinfo.tcpi_ca_state); fprintf(outfile, "%s={%u}\t", "TCPI_RETRANSMITS", tcpinfo.tcpi_retransmits);