AC_MSG_RESULT([ * FreeBSD specific configuration])
AC_DEFINE(BSD4_4, 1, [BSD compatiblity macro])
AC_DEFINE(FREEBSD, 1, [Define if OS is FreeBSD])
-
AC_DEFINE(OPEN_NOFOLLOW_ERRNO, EMLINK, errno returned by open with O_NOFOLLOW)
fi
AC_MSG_RESULT([ * GNU/kFreeBSD specific configuration])
AC_DEFINE(BSD4_4, 1, [BSD compatiblity macro])
AC_DEFINE(FREEBSD, 1, [Define if OS is FreeBSD])
- AC_DEFINE(SENDFILE_FLAVOR_BSD, 1, [Define if the sendfile() function uses BSD semantics])
AC_DEFINE(OPEN_NOFOLLOW_ERRNO, EMLINK, errno returned by open with O_NOFOLLOW)
fi
if test x"$netatalk_cv_search_sendfile" = x"yes"; then
case "$host_os" in
*linux*)
- AC_DEFINE(SENDFILE_FLAVOR_LINUX,1,[Whether linux sendfile() API is available])
- AC_MSG_CHECKING([for sendfile() syscall])
- AC_CACHE_CHECK([for sendfile support],
- [netatalk_cv_HAVE_SENDFILE],
- [AC_TRY_LINK(
- [#include <sys/sendfile.h>],
- [int tofd, fromfd;
- off_t offset;
- size_t total;
- ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);],
- [netatalk_cv_HAVE_SENDFILE=yes]
- )]
- )
-
- # Try and cope with broken Linux sendfile....
- AC_CACHE_CHECK([for broken Linux sendfile support],
- [netatalk_cv_HAVE_BROKEN_LINUX_SENDFILE],
- [AC_TRY_LINK(
- [#if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
- #undef _FILE_OFFSET_BITS
- #endif
- #include <sys/sendfile.h>],
- [int tofd, fromfd;
- off_t offset;
- size_t total;
- ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);],
- [netatalk_cv_HAVE_SENDFILE=yes; netatalk_cv_HAVE_BROKEN_SENDFILE=yes]
- )]
- )
- if test x"$netatalk_cv_HAVE_SENDFILE" = x"yes"; then
- AC_MSG_RESULT(yes);
- else
- AC_MSG_RESULT(no);
- fi
- if test x"$netatalk_cv_HAVE_BROKEN_SENDFILE" = x"yes"; then
- AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether Linux sendfile() is broken])
- fi
+ AC_DEFINE(SENDFILE_FLAVOR_LINUX,1,[Whether linux sendfile() API is available])
+ AC_CHECK_FUNC([sendfile], [netatalk_cv_HAVE_SENDFILE=yes])
;;
*solaris*)
esac
if test x"$netatalk_cv_HAVE_SENDFILE" = x"yes"; then
- AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
fi
fi
#include <atalk/logger.h>
#include "ad_private.h"
-#if defined(SENDFILE_FLAVOR_LINUX) && defined(LINUX_BROKEN_SENDFILE_API)
-
-extern int32_t sendfile (int fdout, int fdin, int32_t *offset, u_int32_t count);
-
-ssize_t sys_sendfile(int tofd, int fromfd, off_t *offset, size_t count)
-{
-u_int32_t small_total;
-int32_t small_offset;
-int32_t nwritten;
-
- /*
- * Fix for broken Linux 2.4 systems with no working sendfile64().
- * If the offset+count > 2 GB then pretend we don't have the
- * system call sendfile at all. The upper layer catches this
- * and uses a normal read. JRA.
- */
-
- if ((sizeof(off_t) >= 8) && (*offset + count > (off_t)0x7FFFFFFF)) {
- errno = ENOSYS;
- return -1;
- }
- small_offset = (int32_t)*offset;
- small_total = (u_int32_t)count;
- nwritten = sendfile(tofd, fromfd, &small_offset, small_total);
- if (nwritten > = 0)
- *offset += nwritten;
-
- return nwritten;
-}
-
-#elif defined(SENDFILE_FLAVOR_LINUX)
+#if defined(SENDFILE_FLAVOR_LINUX)
#include <sys/sendfile.h>
ssize_t sys_sendfile(int tofd, int fromfd, off_t *offset, size_t count)