SMOLNET PORTAL home about changes
iAdd splice speedup for geomyidae. - geomyidae - A small C-based gopherd.	Err	bitreich.org	70
hgit clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/	URL:git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/	bitreich.org	70
1Log	/scm/geomyidae/log.gph	bitreich.org	70
1Files	/scm/geomyidae/files.gph	bitreich.org	70
1Refs	/scm/geomyidae/refs.gph	bitreich.org	70
1Tags	/scm/geomyidae/tag	bitreich.org	70
1README	/scm/geomyidae/file/README.gph	bitreich.org	70
1LICENSE	/scm/geomyidae/file/LICENSE.gph	bitreich.org	70
i---	Err	bitreich.org	70
1commit 2d93b6f04f44d94cc38dd1ef666867c0ca95574f	/scm/geomyidae/commit/2d93b6f04f44d94cc38dd1ef666867c0ca95574f.gph	bitreich.org	70
1parent 23ce04766e993ae515483debfc2c3be1c38b2d0b	/scm/geomyidae/commit/23ce04766e993ae515483debfc2c3be1c38b2d0b.gph	bitreich.org	70
hAuthor: Christoph Lohmann <20h@r-36.net>	URL:mailto:20h@r-36.net	bitreich.org	70
iDate:   Sat, 30 Jul 2022 13:02:13 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iAdd splice speedup for geomyidae.	Err	bitreich.org	70
i	Err	bitreich.org	70
iThank you parayd, Evil_Bob!	Err	bitreich.org	70
i	Err	bitreich.org	70
iLive from brcon2022.	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M ind.c                               |      49 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i	Err	bitreich.org	70
i1 file changed, 49 insertions(+), 0 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/ind.c b/ind.c	/scm/geomyidae/file/ind.c.gph	bitreich.org	70
i@@ -3,6 +3,10 @@	Err	bitreich.org	70
i  * by 20h	Err	bitreich.org	70
i  */	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+#ifdef __linux__	Err	bitreich.org	70
i+        #define _GNU_SOURCE	Err	bitreich.org	70
i+#endif	Err	bitreich.org	70
i+	Err	bitreich.org	70
i #include <unistd.h>	Err	bitreich.org	70
i #include <stdarg.h>	Err	bitreich.org	70
i #include <string.h>	Err	bitreich.org	70
i@@ -21,6 +25,10 @@	Err	bitreich.org	70
i #include <sys/ioctl.h>	Err	bitreich.org	70
i #include <limits.h>	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+#define PAGE_SHIFT 12	Err	bitreich.org	70
i+#define PAGE_SIZE (1UL << PAGE_SHIFT)	Err	bitreich.org	70
i+#define BLOCK_SIZE ((PAGE_SIZE * 16) - 1)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i #include "arg.h"	Err	bitreich.org	70
i #include "ind.h"	Err	bitreich.org	70
i #include "handlr.h"	Err	bitreich.org	70
i@@ -92,6 +100,43 @@ waitforpendingbytes(int sock)	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+#ifdef __linux__	Err	bitreich.org	70
i+int	Err	bitreich.org	70
i+xsplice(int fd, int sock)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        int pipefd[2], ret = 0;	Err	bitreich.org	70
i+        ssize_t nread, nwritten;	Err	bitreich.org	70
i+        off_t in_offset = 0;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (pipe(pipefd) < 0) {	Err	bitreich.org	70
i+                perror("pipe");	Err	bitreich.org	70
i+                _exit(1);	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        do {	Err	bitreich.org	70
i+                nread = splice(fd, &in_offset, pipefd[1], NULL,	Err	bitreich.org	70
i+                        BLOCK_SIZE, SPLICE_F_MOVE | SPLICE_F_MORE);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                if (nread <= 0) {	Err	bitreich.org	70
i+                        ret = nread < 0 ? 1 : 0;	Err	bitreich.org	70
i+                        goto out;	Err	bitreich.org	70
i+                }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                nwritten  = splice(pipefd[0], NULL, sock, NULL, BLOCK_SIZE, SPLICE_F_MOVE | SPLICE_F_MORE);	Err	bitreich.org	70
i+                if (nwritten < 0) {	Err	bitreich.org	70
i+                        ret = 1;	Err	bitreich.org	70
i+                        goto out;	Err	bitreich.org	70
i+                }	Err	bitreich.org	70
i+        } while (nwritten > 0);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+out:	Err	bitreich.org	70
i+        close(pipefd[0]);	Err	bitreich.org	70
i+        close(pipefd[1]);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        return ret;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+#endif	Err	bitreich.org	70
i+	Err	bitreich.org	70
i int	Err	bitreich.org	70
i xsendfile(int fd, int sock)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i@@ -100,6 +145,10 @@ xsendfile(int fd, int sock)	Err	bitreich.org	70
i         size_t bufsiz = BUFSIZ;	Err	bitreich.org	70
i         int len, sent, optval;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+#ifdef splice	Err	bitreich.org	70
i+        return xsplice(fd, sock);	Err	bitreich.org	70
i+#endif	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         USED(optval);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         /*	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/geomyidae/commit/2d93b6f04f44...
Content-Typetext/plain; charset=utf-8