git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [patch 13/15] no-socklen_t.patch

From
GVGary V. Vaughan <git@mlists.thewrittenword.com>
Date
Apr 25, 2010, 08:39 UTC
Message-ID
<20100316092122.GF26540@thor.il.thewrittenword.com>
In-Reply-To
<7vzl28lodo.fsf@alter.siamese.dyndns.org>
On Tue, Mar 16, 2010 at 12:25:07AM -0700, Junio C Hamano wrote:
Show 8 quoted lines
> "Gary V. Vaughan" <git@mlists.thewrittenword.com> writes:
> 
> > +ifneq (socklen_t,$(SOCKLEN_T))
> > +	BASIC_CFLAGS += -Dsocklen_t=$(SOCKLEN_T)
> > +endif
> 
> This looks like making use of configure mandatory to me?  Could you do
> this patch without doing so?
Sure.
SunOS 2.6 and earlier, HP-UX 10.20 and OSF1 do not have a socklen_t type
declaration.
---
 Makefile      |   10 ++++++++++
 aclocal.m4    |   41 +++++++++++++++++++++++++++++++++++++++++
 config.mak.in |    1 +
 configure.ac  |    6 ++++++
 4 files changed, 58 insertions(+)
Index: b/Makefile
===================================================================
--- a/Makefile
+++ b/Makefile
@@ -8,6 +8,9 @@ all::
 # Define SANE_TOOL_PATH to a colon-separated list of paths to prepend
 # to PATH if your tools in /usr/bin are broken.
 #
+# Define SOCKLEN_T to a suitable type (such as 'size_t') if your
+# system headers do not define a socklen_t type.
+#
 # Define SNPRINTF_RETURNS_BOGUS if your are on a system which snprintf()
 # or vsnprintf() return -1 instead of number of characters which would
 # have been written to the final string if enough space had been available.
@@ -698,6 +701,7 @@ EXTLIBS =
 ifeq ($(uname_S),OSF1)
 	# Need this for u_short definitions et al
 	BASIC_CFLAGS += -D_OSF_SOURCE
+	SOCKLEN_T = int
 	NO_STRTOULL = YesPlease
 	NO_NSEC = YesPlease
 endif
@@ -774,6 +778,7 @@ ifeq ($(uname_S),SunOS)
 	NO_MKSTEMPS = YesPlease
 	NO_REGEX = YesPlease
 	ifeq ($(uname_R),5.6)
+		SOCKLEN_T = int
 		NO_HSTRERROR = YesPlease
 		NO_IPV6 = YesPlease
 		NO_SOCKADDR_STORAGE = YesPlease
@@ -938,6 +943,7 @@ ifeq ($(uname_S),HP-UX)
 	NO_NSEC = YesPlease
 	SNPRINTF_RETURNS_BOGUS = YesPlease
 	ifeq ($(uname_R),B.10.20)
+		SOCKLEN_T = size_t
 		NO_PREAD = YesPlease
 		NO_INET_NTOP = YesPlease
 		NO_INET_PTON = YesPlease
@@ -1064,6 +1070,10 @@ else
 BROKEN_PATH_FIX = '/^\# @@BROKEN_PATH_FIX@@$$/d'
 endif
 
+ifeq (,$(SOCKLEN_T)
+	BASIC_CFLAGS += -Dsocklen_t=$(SOCKLEN_T)
+endif
+
 ifeq ($(uname_S),Darwin)
 	ifndef NO_FINK
 		ifeq ($(shell test -d /sw/lib && echo y),y)
Index: b/configure.ac
===================================================================
--- a/configure.ac
+++ b/configure.ac
@@ -613,6 +613,12 @@ AC_SUBST(OLD_ICONV)
 ## Checks for typedefs, structures, and compiler characteristics.
 AC_MSG_NOTICE([CHECKS for typedefs, structures, and compiler characteristics])
 #
+TYPE_SOCKLEN_T
+case $ac_cv_type_socklen_t in
+  yes)	;;
+  *)  	AC_SUBST([SOCKLEN_T], [$git_cv_socklen_t_equiv]) ;;
+esac
+
 # Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent.
 AC_CHECK_MEMBER(struct dirent.d_ino,
 [NO_D_INO_IN_DIRENT=],
Index: b/config.mak.in
===================================================================
--- a/config.mak.in
+++ b/config.mak.in
@@ -58,6 +58,7 @@ NO_INET_PTON=@NO_INET_PTON@
 NO_ICONV=@NO_ICONV@
 OLD_ICONV=@OLD_ICONV@
 NO_DEFLATE_BOUND=@NO_DEFLATE_BOUND@
+SOCKLEN_T=@SOCKLEN_T@
 FREAD_READS_DIRECTORIES=@FREAD_READS_DIRECTORIES@
 SNPRINTF_RETURNS_BOGUS=@SNPRINTF_RETURNS_BOGUS@
 NO_PTHREADS=@NO_PTHREADS@
Index: b/aclocal.m4
===================================================================
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,41 @@
+dnl Check for socklen_t: historically on BSD it is an int, and in
+dnl POSIX 1g it is a type of its own, but some platforms use different
+dnl types for the argument to getsockopt, getpeername, etc.  So we
+dnl have to test to find something that will work.
+AC_DEFUN([TYPE_SOCKLEN_T],
+[
+   AC_CHECK_TYPE([socklen_t], ,[
+      AC_MSG_CHECKING([for socklen_t equivalent])
+      AC_CACHE_VAL([git_cv_socklen_t_equiv],
+      [
+         # Systems have either "struct sockaddr *" or
+         # "void *" as the second argument to getpeername
+         git_cv_socklen_t_equiv=
+         for arg2 in "struct sockaddr" void; do
+            for t in int size_t unsigned long "unsigned long"; do
+               AC_TRY_COMPILE([
+                  #include <sys/types.h>
+                  #include <sys/socket.h>
+
+                  int getpeername (int, $arg2 *, $t *);
+               ],[
+                  $t len;
+                  getpeername(0,0,&len);
+               ],[
+                  git_cv_socklen_t_equiv="$t"
+                  break 2
+               ])
+            done
+         done
+
+         if test "x$git_cv_socklen_t_equiv" = x; then
+            AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
+         fi
+      ])
+      AC_MSG_RESULT($git_cv_socklen_t_equiv)
+      AC_DEFINE_UNQUOTED(socklen_t, $git_cv_socklen_t_equiv,
+			[type to use in place of socklen_t if not defined])],
+      [#include <sys/types.h>
+#include <sys/socket.h>])
+])
+
Cheeers,
-- 
Gary V. Vaughan (gary@thewrittenword.com)
Previous: Junio C HamanoNext: Gary V. Vaughan
Message 33 of 37 in “Portability Patches v3”
  1. 00/15 Portability Patches v3Gary V. Vaughan, Mar 16, 2010
  2. 01/15 user-cppflags.patchGary V. Vaughan, Mar 16, 2010
  3. Junio C HamanoMar 16, 2010
  4. 02/15 const-expr.patchGary V. Vaughan, Mar 16, 2010
  5. Johannes SixtMar 16, 2010
  6. Gary V. VaughanMar 16, 2010
  7. Avery PennarunMar 16, 2010
  8. Gary V. VaughanApr 25, 2010
  9. 03/15 pthread.patchGary V. Vaughan, Mar 16, 2010
  10. Junio C HamanoMar 16, 2010
  11. 04/15 diff-export.patchGary V. Vaughan, Mar 16, 2010
  12. Junio C HamanoMar 16, 2010
  13. 05/15 diff-test_cmp.patchGary V. Vaughan, Mar 16, 2010
  14. Junio C HamanoMar 16, 2010
  15. Gary V. VaughanApr 25, 2010
  16. 06/15 diff-defaults.patchGary V. Vaughan, Mar 16, 2010
  17. Junio C HamanoMar 16, 2010
  18. Gary V. VaughanApr 25, 2010
  19. 07/15 host-IRIX.patchGary V. Vaughan, Mar 16, 2010
  20. Junio C HamanoMar 16, 2010
  21. Gary V. VaughanApr 25, 2010
  22. Brandon CaseyMar 16, 2010
  23. Gary V. VaughanApr 25, 2010
  24. 08/15 host-HPUX10.patchGary V. Vaughan, Mar 16, 2010
  25. 09/15 host-HPUX11.patchGary V. Vaughan, Mar 16, 2010
  26. 10/15 host-OSF1.patchGary V. Vaughan, Mar 16, 2010
  27. 11/15 no-hstrerror.patchGary V. Vaughan, Mar 16, 2010
  28. Junio C HamanoMar 16, 2010
  29. Gary V. VaughanApr 25, 2010
  30. 12/15 no-inet_ntop.patchGary V. Vaughan, Mar 16, 2010
  31. 13/15 no-socklen_t.patchGary V. Vaughan, Mar 16, 2010
  32. Junio C HamanoMar 16, 2010
  33. Gary V. VaughanApr 25, 2010
  34. 14/15 no-ss_family.patchGary V. Vaughan, Mar 16, 2010
  35. 15/15 no-inline.patchGary V. Vaughan, Mar 16, 2010
  36. Sverre RabbelierMar 16, 2010
  37. Brandon CaseyMar 16, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.