tech@mandoc.bsd.lv
 help / color / Atom feed
* small portability issue
@ 2016-08-05 19:40 Baptiste Daroussin
  2016-08-05 23:29 ` Ingo Schwarze
  0 siblings, 1 reply; 3+ messages in thread
From: Baptiste Daroussin @ 2016-08-05 19:40 UTC (permalink / raw)
  To: tech

[-- Attachment #1: Type: text/plain, Size: 331 bytes --]

Hi,

I have been testing the very latest mandoc version from cvs (without sqlite)

I notice 2 small issues on FreeBSD

There is no endian.h on FreeBSD, so to get be32toh I need to include
<sys/endian.h> I bet it will be the same on at least Dragonfly and MacOS X

The second issue is dba.c needs (sys/)endian.h

Best regards,
Bapt

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: small portability issue
  2016-08-05 19:40 small portability issue Baptiste Daroussin
@ 2016-08-05 23:29 ` Ingo Schwarze
  2016-08-05 23:36   ` Baptiste Daroussin
  0 siblings, 1 reply; 3+ messages in thread
From: Ingo Schwarze @ 2016-08-05 23:29 UTC (permalink / raw)
  To: Baptiste Daroussin; +Cc: tech

Hi Baptiste,

Baptiste Daroussin FreeBSD wrote on Fri, Aug 05, 2016 at 09:40:57PM +0200:

> I have been testing the very latest mandoc version from cvs (without sqlite)
> 
> I notice 2 small issues on FreeBSD
> 
> There is no endian.h on FreeBSD, so to get be32toh I need to include
> <sys/endian.h> I bet it will be the same on at least Dragonfly and MacOS X

And on Solaris, <sys/endian.h> does not exist either, so i committed
what you see below.

> The second issue is dba.c needs (sys/)endian.h

Fixed, too.

Thanks for testing and reporting, and sorry for forgetting to
mention you in the second commit message...  I tested mostly on
Solaris, which drove the FreeBSD case right out of my mind.  :-(

Yours,
  Ingo


Log Message:
-----------
The concept of endianness seems to be somewhat newfangled, so the
respective conversion functions are not yet properly standardized.
Rumour has it that POSIX is working on it, though.
For now, sprinkle some configuration glue.

Modified Files:
--------------
    mdocml:
        Makefile
        configure
        configure.local.example
        dba.c
        dba_write.c
        dbm.c
        dbm_map.c

Added Files:
-----------
    mdocml:
        test-be32toh.c
        test-ntohl.c

Revision Data
-------------
Index: dbm.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/dbm.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -Ldbm.c -Ldbm.c -u -p -r1.2 -r1.3
--- dbm.c
+++ dbm.c
@@ -20,7 +20,13 @@
 #include "config.h"
 
 #include <assert.h>
+#if HAVE_ENDIAN
 #include <endian.h>
+#elif HAVE_SYS_ENDIAN
+#include <sys/endian.h>
+#elif HAVE_NTOHL
+#include <arpa/inet.h>
+#endif
 #if HAVE_ERR
 #include <err.h>
 #endif
Index: configure.local.example
===================================================================
RCS file: /home/cvs/mdocml/mdocml/configure.local.example,v
retrieving revision 1.19
retrieving revision 1.20
diff -Lconfigure.local.example -Lconfigure.local.example -u -p -r1.19 -r1.20
--- configure.local.example
+++ configure.local.example
@@ -227,6 +227,7 @@ CFLAGS="-g"
 # be regarded as successful).
 
 HAVE_DIRENT_NAMLEN=0
+HAVE_ENDIAN=0
 HAVE_EFTYPE=0
 HAVE_ERR=0
 HAVE_FTS=0
@@ -234,6 +235,7 @@ HAVE_GETLINE=0
 HAVE_GETSUBOPT=0
 HAVE_ISBLANK=0
 HAVE_MKDTEMP=0
+HAVE_NTOHL=0
 HAVE_OHASH=0
 HAVE_PATH_MAX=0
 HAVE_PLEDGE=0
@@ -248,5 +250,6 @@ HAVE_STRLCPY=0
 HAVE_STRPTIME=0
 HAVE_STRSEP=0
 HAVE_STRTONUM=0
+HAVE_SYS_ENDIAN=0
 HAVE_VASPRINTF=0
 HAVE_WCHAR=0
--- /dev/null
+++ test-be32toh.c
@@ -0,0 +1,11 @@
+#ifdef SYS_ENDIAN
+#include <sys/endian.h>
+#else
+#include <endian.h>
+#endif
+
+int
+main(void)
+{
+	return htobe32(be32toh(0x3a7d0cdb)) != 0x3a7d0cdb;
+}
--- /dev/null
+++ test-ntohl.c
@@ -0,0 +1,7 @@
+#include <arpa/inet.h>
+
+int
+main(void)
+{
+	return htonl(ntohl(0x3a7d0cdb)) != 0x3a7d0cdb;
+}
Index: dbm_map.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/dbm_map.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -Ldbm_map.c -Ldbm_map.c -u -p -r1.2 -r1.3
--- dbm_map.c
+++ dbm_map.c
@@ -24,7 +24,13 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 
+#if HAVE_ENDIAN
 #include <endian.h>
+#elif HAVE_SYS_ENDIAN
+#include <sys/endian.h>
+#elif HAVE_NTOHL
+#include <arpa/inet.h>
+#endif
 #if HAVE_ERR
 #include <err.h>
 #endif
Index: Makefile
===================================================================
RCS file: /home/cvs/mdocml/mdocml/Makefile,v
retrieving revision 1.491
retrieving revision 1.492
diff -LMakefile -LMakefile -u -p -r1.491 -r1.492
--- Makefile
+++ Makefile
@@ -19,7 +19,8 @@ VERSION = 1.14.0
 
 # === LIST OF FILES ====================================================
 
-TESTSRCS	 = test-dirent-namlen.c \
+TESTSRCS	 = test-be32toh.c \
+		   test-dirent-namlen.c \
 		   test-EFTYPE.c \
 		   test-err.c \
 		   test-fts.c \
@@ -28,6 +29,7 @@ TESTSRCS	 = test-dirent-namlen.c \
 		   test-isblank.c \
 		   test-mkdtemp.c \
 		   test-nanosleep.c \
+		   test-ntohl.c \
 		   test-ohash.c \
 		   test-PATH_MAX.c \
 		   test-pledge.c \
Index: configure
===================================================================
RCS file: /home/cvs/mdocml/mdocml/configure,v
retrieving revision 1.49
retrieving revision 1.50
diff -Lconfigure -Lconfigure -u -p -r1.49 -r1.50
--- configure
+++ configure
@@ -50,6 +50,7 @@ BUILD_CGI=0
 
 HAVE_DIRENT_NAMLEN=
 HAVE_EFTYPE=
+HAVE_ENDIAN=
 HAVE_ERR=
 HAVE_FTS=
 HAVE_GETLINE=
@@ -57,6 +58,7 @@ HAVE_GETSUBOPT=
 HAVE_ISBLANK=
 HAVE_MKDTEMP=
 HAVE_NANOSLEEP=
+HAVE_NTOHL=
 HAVE_OHASH=
 HAVE_PATH_MAX=
 HAVE_PLEDGE=
@@ -72,6 +74,7 @@ HAVE_STRLCPY=
 HAVE_STRPTIME=
 HAVE_STRSEP=
 HAVE_STRTONUM=
+HAVE_SYS_ENDIAN=
 HAVE_VASPRINTF=
 HAVE_WCHAR=
 
@@ -197,6 +200,8 @@ get_locale() {
 
 # --- library functions ---
 runtest dirent-namlen	DIRENT_NAMLEN	|| true
+runtest be32toh		ENDIAN		|| true
+runtest be32toh		SYS_ENDIAN	-DSYS_ENDIAN || true
 runtest EFTYPE		EFTYPE		|| true
 runtest err		ERR		|| true
 runtest fts		FTS		|| true
@@ -204,6 +209,7 @@ runtest getline		GETLINE		|| true
 runtest getsubopt	GETSUBOPT	|| true
 runtest isblank		ISBLANK		|| true
 runtest mkdtemp		MKDTEMP		|| true
+runtest ntohl		NTOHL		|| true
 runtest PATH_MAX	PATH_MAX	|| true
 runtest pledge		PLEDGE		|| true
 runtest sandbox_init	SANDBOX_INIT	|| true
@@ -220,6 +226,14 @@ runtest strsep		STRSEP		|| true
 runtest strtonum	STRTONUM	|| true
 runtest vasprintf	VASPRINTF	|| true
 
+if [ ${HAVE_ENDIAN} -eq 0 -a \
+     ${HAVE_SYS_ENDIAN} -eq 0 -a \
+     ${HAVE_NTOHL} -eq 0 ]; then
+	echo "FATAL: no endian conversion functions found" 1>&2
+	echo "FATAL: no endian conversion functions found" 1>&3
+	exit 1
+fi
+
 # --- wide character and locale support ---
 if get_locale; then
 	runtest wchar WCHAR -DUTF8_LOCALE=\"${UTF8_LOCALE}\" || true
@@ -296,15 +310,21 @@ echo "#define MANPATH_DEFAULT \"${MANPAT
 [ -n "${HOMEBREWDIR}" ] && echo "#define HOMEBREWDIR \"${HOMEBREWDIR}\""
 [ ${HAVE_EFTYPE} -eq 0 ] && echo "#define EFTYPE EINVAL"
 [ ${HAVE_PATH_MAX} -eq 0 ] && echo "#define PATH_MAX 4096"
+if [ ${HAVE_ENDIAN} -eq 0 -a ${HAVE_SYS_ENDIAN} -eq 0 ]; then
+	echo "#define be32toh ntohl"
+	echo "#define htobe32 htonl"
+fi
 
 cat << __HEREDOC__
 #define HAVE_DIRENT_NAMLEN ${HAVE_DIRENT_NAMLEN}
+#define HAVE_ENDIAN ${HAVE_ENDIAN}
 #define HAVE_ERR ${HAVE_ERR}
 #define HAVE_FTS ${HAVE_FTS}
 #define HAVE_GETLINE ${HAVE_GETLINE}
 #define HAVE_GETSUBOPT ${HAVE_GETSUBOPT}
 #define HAVE_ISBLANK ${HAVE_ISBLANK}
 #define HAVE_MKDTEMP ${HAVE_MKDTEMP}
+#define HAVE_NTOHL ${HAVE_NTOHL}
 #define HAVE_PLEDGE ${HAVE_PLEDGE}
 #define HAVE_PROGNAME ${HAVE_PROGNAME}
 #define HAVE_REALLOCARRAY ${HAVE_REALLOCARRAY}
@@ -318,6 +338,7 @@ cat << __HEREDOC__
 #define HAVE_STRPTIME ${HAVE_STRPTIME}
 #define HAVE_STRSEP ${HAVE_STRSEP}
 #define HAVE_STRTONUM ${HAVE_STRTONUM}
+#define HAVE_SYS_ENDIAN ${HAVE_SYS_ENDIAN}
 #define HAVE_VASPRINTF ${HAVE_VASPRINTF}
 #define HAVE_WCHAR ${HAVE_WCHAR}
 #define HAVE_OHASH ${HAVE_OHASH}
Index: dba_write.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/dba_write.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -Ldba_write.c -Ldba_write.c -u -p -r1.2 -r1.3
--- dba_write.c
+++ dba_write.c
@@ -20,7 +20,13 @@
 #include "config.h"
 
 #include <assert.h>
+#if HAVE_ENDIAN
 #include <endian.h>
+#elif HAVE_SYS_ENDIAN
+#include <sys/endian.h>
+#elif HAVE_NTOHL
+#include <arpa/inet.h>
+#endif
 #if HAVE_ERR
 #include <err.h>
 #endif
Index: dba.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/dba.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -Ldba.c -Ldba.c -u -p -r1.4 -r1.5
--- dba.c
+++ dba.c
@@ -17,8 +17,16 @@
  * Allocation-based version of the mandoc database, for read-write access.
  * The interface is defined in "dba.h".
  */
+#include "config.h"
+
 #include <sys/types.h>
+#if HAVE_ENDIAN
 #include <endian.h>
+#elif HAVE_SYS_ENDIAN
+#include <sys/endian.h>
+#elif HAVE_NTOHL
+#include <arpa/inet.h>
+#endif
 #include <errno.h>
 #include <stdint.h>
 #include <stdlib.h>
--
 To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: small portability issue
  2016-08-05 23:29 ` Ingo Schwarze
@ 2016-08-05 23:36   ` Baptiste Daroussin
  0 siblings, 0 replies; 3+ messages in thread
From: Baptiste Daroussin @ 2016-08-05 23:36 UTC (permalink / raw)
  To: tech

[-- Attachment #1: Type: text/plain, Size: 953 bytes --]

On Sat, Aug 06, 2016 at 01:29:29AM +0200, Ingo Schwarze wrote:
> Hi Baptiste,
> 
> Baptiste Daroussin FreeBSD wrote on Fri, Aug 05, 2016 at 09:40:57PM +0200:
> 
> > I have been testing the very latest mandoc version from cvs (without sqlite)
> > 
> > I notice 2 small issues on FreeBSD
> > 
> > There is no endian.h on FreeBSD, so to get be32toh I need to include
> > <sys/endian.h> I bet it will be the same on at least Dragonfly and MacOS X
> 
> And on Solaris, <sys/endian.h> does not exist either, so i committed
> what you see below.

I can confirm it works fine on freebsd thank you!
> 
> > The second issue is dba.c needs (sys/)endian.h
> 
> Fixed, too.
> 
> Thanks for testing and reporting, and sorry for forgetting to
> mention you in the second commit message...  I tested mostly on
> Solaris, which drove the FreeBSD case right out of my mind.  :-(

no worry and thank you for prompt fixing!

Best regards,
Bapt

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, back to index

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-05 19:40 small portability issue Baptiste Daroussin
2016-08-05 23:29 ` Ingo Schwarze
2016-08-05 23:36   ` Baptiste Daroussin

tech@mandoc.bsd.lv

Archives are clonable: git clone --mirror http://inbox.vuxu.org/mandoc-tech

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://inbox.vuxu.org/vuxu.archive.mandoc.tech


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git