From: Wilfried Goesgens Date: Mon, 4 Jun 2012 21:04:20 +0000 (+0200) Subject: configure: check for splice() system call; sendfile isn't all apropriate in older... X-Git-Tag: v8.12~35 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=339c9999dbd2afb4cbd14af8f4b49ea1b7838fa3 configure: check for splice() system call; sendfile isn't all apropriate in older linux or debian k/freebsd --- diff --git a/libcitadel/configure.in b/libcitadel/configure.in index faba4c502..8438d415c 100755 --- a/libcitadel/configure.in +++ b/libcitadel/configure.in @@ -78,6 +78,32 @@ AC_CHECK_HEADER(sys/sendfile.h, [AC_DEFINE(LINUX_SENDFILE, [], [whether we have dnl TODO: we might need to check for the actual syntax.... +AC_MSG_CHECKING([whether your system knows about splice()]) +AC_TRY_COMPILE([ +#define _GNU_SOURCE +#include +#include +], +[ + ssize_t sent, pipesize; + int fd, SplicePipe[2]; + pipesize = splice(fd, NULL, + SplicePipe[1], NULL, + 1, + SPLICE_F_MORE | SPLICE_F_MOVE|SPLICE_F_NONBLOCK); +], + [ + ok_splice=yes + AC_DEFINE(LINUX_SPLICE, [], [whether we have the linux splice api]) + AC_MSG_RESULT([yes]) + ], + [ + ok_splice=no + AC_MSG_RESULT([no]) + ] +) + + AC_CHECK_HEADERS(iconv.h) diff --git a/libcitadel/lib/stringbuf.c b/libcitadel/lib/stringbuf.c index 1d2434277..0d88f7ca1 100644 --- a/libcitadel/lib/stringbuf.c +++ b/libcitadel/lib/stringbuf.c @@ -3869,7 +3869,7 @@ void FDIOBufferInit(FDIOBuffer *FDB, IOBuffer *IO, int FD, long TotalSendSize) FDB->ChunkSize = FDB->TotalSendSize = TotalSendSize; FDB->IOB = IO; -#ifndef LINUX_SENDFILE +#ifndef LINUX_SPLICE FDB->ChunkBuffer = NewStrBufPlain(NULL, TotalSendSize + 1); #else pipe(FDB->SplicePipe); @@ -3879,7 +3879,7 @@ void FDIOBufferInit(FDIOBuffer *FDB, IOBuffer *IO, int FD, long TotalSendSize) void FDIOBufferDelete(FDIOBuffer *FDB) { -#ifndef LINUX_SENDFILE +#ifndef LINUX_SPLICE FreeStrBuf(&FDB->ChunkBuffer); #else close(FDB->SplicePipe[0]); @@ -3893,7 +3893,7 @@ void FDIOBufferDelete(FDIOBuffer *FDB) int FileSendChunked(FDIOBuffer *FDB, const char **Err) { -#ifdef LINUX_SENDFILE +#ifdef LINUX_SPLICE ssize_t sent; sent = sendfile(FDB->IOB->fd, FDB->OtherFD, &FDB->TotalSentAlready, FDB->ChunkSendRemain); if (sent == -1) @@ -3939,7 +3939,7 @@ int FileRecvChunked(FDIOBuffer *FDB, const char **Err) { ssize_t sent, pipesize; -#ifdef LINUX_SENDFILE +#ifdef LINUX_SPLICE pipesize = splice(FDB->IOB->fd, NULL, FDB->SplicePipe[1], NULL,