From 35782a1facdc61ae007086657689cf289c96dd92 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 21 Feb 2014 17:05:55 -0500 Subject: allow bsd_sendfile with freebsd-glue on Debian/kFreeBSD Debian GNU/kFreeBSD users may ./configure with LIBS=-lfreebsd-glue to use the FreeBSD sendfile syscall. --- configure.ac | 3 +++ http_get.c | 22 ++++++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index 4e66f84..1ad3b41 100644 --- a/configure.ac +++ b/configure.ac @@ -50,6 +50,9 @@ AC_CHECK_FUNCS([sendfile]) AC_CHECK_FUNCS([open_memstream]) AC_CHECK_FUNCS([posix_fadvise]) +dnl need LIBS=-lfreebsd-glue (but not CFLAGS=-I/usr/include/freebsd) +AC_CHECK_FUNCS([bsd_sendfile]) + dnl non-standard, but common AC_CHECK_FUNCS([pthread_yield]) diff --git a/http_get.c b/http_get.c index eb6c5a8..7e43b31 100644 --- a/http_get.c +++ b/http_get.c @@ -5,11 +5,18 @@ #include "cmogstored.h" #include "http.h" -#if defined(HAVE_SENDFILE) -# ifdef HAVE_SYS_SENDFILE_H /* Linux */ -# include -# endif -# ifndef __linux__ + +#if defined(HAVE_SYS_SENDFILE_H) && !defined(HAVE_BSD_SENDFILE) +# include +#endif + +#if defined(__linux__) +/* all good */ +#elif defined(HAVE_SENDFILE) || defined(HAVE_BSD_SENDFILE) +# if defined(HAVE_BSD_SENDFILE) && !defined(HAVE_SENDFILE)/* Debian kFBSD */ +# define sendfile(fd,s,offset,nbytes,hdtr,sbytes,flags) \ + bsd_sendfile((fd),(s),(offset),(nbytes),(hdtr),(sbytes),(flags)) +# endif /* HAVE_BSD_SENDFILE */ /* * make BSD sendfile look like Linux for now... * we can support SF_NODISKIO later @@ -28,9 +35,12 @@ static ssize_t linux_sendfile(int sockfd, int filefd, off_t *off, size_t count) return (ssize_t)rc; } + +# if defined(HAVE_BSD_SENDFILE) /* Debian GNU/kFreeBSD */ +# undef sendfile +# endif /* HAVE_BSD_SENDFILE */ # define sendfile(out_fd, in_fd, offset, count) \ linux_sendfile((out_fd),(in_fd),(offset),(count)) -# endif #else # include "compat_sendfile.h" #endif -- cgit v1.2.3-24-ge0c7