configure: check for splice() system call; sendfile isn't all apropriate in older...
authorWilfried Goesgens <dothebart@citadel.org>
Mon, 4 Jun 2012 21:04:20 +0000 (23:04 +0200)
committerWilfried Goesgens <dothebart@citadel.org>
Mon, 4 Jun 2012 21:04:20 +0000 (23:04 +0200)
libcitadel/configure.in
libcitadel/lib/stringbuf.c

index faba4c5027813b59a4db96cf0522987347ff6315..8438d415c6ec65041c724a736d3508f28a4152a5 100755 (executable)
@@ -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 <unistd.h>
+#include <fcntl.h>
+],
+[
+       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)
 
 
index 1d24342771ee10998ef1e251379474cde22d8e89..0d88f7ca14f9c2e9925b744300194791c3334f7f 100644 (file)
@@ -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,