From: Timo Sirainen Date: Sat, 22 May 2004 02:16:36 +0000 (+0300) Subject: Solaris: Move from sendfilev() to sendfile() (was it always there?). Make X-Git-Tag: 1.1.alpha1~4071 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d574f7f3704607bdf59179b2fed37fcad568f95d;p=thirdparty%2Fdovecot%2Fcore.git Solaris: Move from sendfilev() to sendfile() (was it always there?). Make EAFNOSUPPORT error Linux-compatible EINVAL. --HG-- branch : HEAD --- diff --git a/configure.in b/configure.in index 5f2d381f3e..cded7e5f19 100644 --- a/configure.in +++ b/configure.in @@ -1,7 +1,7 @@ AC_INIT(src) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(dovecot, 1.0-test9) +AM_INIT_AUTOMAKE(dovecot, 1.0-test10) AM_MAINTAINER_MODE @@ -721,10 +721,10 @@ AC_TRY_RUN([ ]) -dnl * Solaris compatible sendfilev() -AC_CHECK_LIB(sendfile, sendfilev, [ +dnl * Solaris compatible sendfile() +AC_CHECK_LIB(sendfile, sendfile, [ LIBS="$LIBS -lsendfile" - AC_DEFINE(HAVE_SOLARIS_SENDFILEV,, Define if you have Solaris-compatible sendfilev()) + AC_DEFINE(HAVE_SOLARIS_SENDFILE,, Define if you have Solaris-compatible sendfile()) ], [ dnl * Linux compatible sendfile() - don't check if Solaris one was found. dnl * This seems to pass with Solaris for some reason.. diff --git a/src/lib/sendfile-util.c b/src/lib/sendfile-util.c index 14a49495fc..b84a8086f5 100644 --- a/src/lib/sendfile-util.c +++ b/src/lib/sendfile-util.c @@ -81,15 +81,13 @@ ssize_t safe_sendfile(int out_fd, int in_fd, uoff_t *offset, size_t count) } } -#elif defined (HAVE_SOLARIS_SENDFILEV) +#elif defined (HAVE_SOLARIS_SENDFILE) #include #include "network.h" ssize_t safe_sendfile(int out_fd, int in_fd, uoff_t *offset, size_t count) { - struct sendfilevec vec; - size_t sbytes; ssize_t ret; i_assert(count <= SSIZE_T_MAX); @@ -97,19 +95,13 @@ ssize_t safe_sendfile(int out_fd, int in_fd, uoff_t *offset, size_t count) /* NOTE: if outfd is not a socket, some Solaris versions will kernel panic */ - vec.sfv_fd = in_fd; - vec.sfv_flag = 0; - vec.sfv_off = *offset; - vec.sfv_len = count; - - ret = sendfilev(out_fd, &vec, 1, &sbytes); - - *offset += sbytes; - - if (ret >= 0 || (ret < 0 && errno == EAGAIN && sbytes > 0)) - return (ssize_t)sbytes; - else - return -1; + ret = sendfile(out_fd, in_fd, offset, count); + if (ret < 0 && errno == EAFNOSUPPORT) { + /* not supported, return Linux-like EINVAL so caller + sees only consistent errnos. */ + errno = EINVAL; + } + return ret; } #else