summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app-shells/zsh/files/zsh-5.8.1-performance_regression_fix.patch')
-rw-r--r--app-shells/zsh/files/zsh-5.8.1-performance_regression_fix.patch139
1 files changed, 0 insertions, 139 deletions
diff --git a/app-shells/zsh/files/zsh-5.8.1-performance_regression_fix.patch b/app-shells/zsh/files/zsh-5.8.1-performance_regression_fix.patch
deleted file mode 100644
index 14a3f38eb96d..000000000000
--- a/app-shells/zsh/files/zsh-5.8.1-performance_regression_fix.patch
+++ /dev/null
@@ -1,139 +0,0 @@
-From cbe8d2bcdc20682464217856aa48628804637f28 Mon Sep 17 00:00:00 2001
-From: Bart Schaefer <schaefer@zsh.org>
-Date: Thu, 28 Apr 2022 21:06:51 -0700
-Subject: [PATCH] 50133: use read-ahead and lseek-rewind for efficient
- line-buffered input
-
----
- ChangeLog | 6 ++++++
- Src/input.c | 24 ++++++++++++++++++++-
- configure.ac | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 88 insertions(+), 1 deletion(-)
-
-diff --git a/ChangeLog b/ChangeLog
-index cae2fc4e3..79c77741b 100644
---- a/ChangeLog
-+++ b/ChangeLog
-@@ -1,3 +1,9 @@
-+2022-04-28 Bart Schaefer <schaefer@zsh.org>
-+
-+ * 50133 (Bart, PWS, Jun-ichi): Src/input.c, configure.ac: when
-+ lseek(2) is available, use it to check for and rewind read-ahead
-+ for more efficient line-buffered input.
-+
- 2022-03-03 Peter Stephenson <p.w.stephenson@ntlworld.com>
-
- * 49792: Src/input.c, Test/A01grammar.ztst: Use line buffering
-diff --git a/Src/input.c b/Src/input.c
-index caa8e23b0..6cc1b8a51 100644
---- a/Src/input.c
-+++ b/Src/input.c
-@@ -217,12 +217,34 @@ shinbufrestore(void)
- static int
- shingetchar(void)
- {
-- int nread;
-+ int nread, rsize = isset(SHINSTDIN) ? 1 : SHINBUFSIZE;
-
- if (shinbufptr < shinbufendptr)
- return STOUC(*shinbufptr++);
-
- shinbufreset();
-+#ifdef USE_LSEEK
-+ if (rsize == 1 && lseek(SHIN, 0, SEEK_CUR) != (off_t)-1)
-+ rsize = SHINBUFSIZE;
-+ if (rsize > 1) {
-+ do {
-+ errno = 0;
-+ nread = read(SHIN, shinbuffer, rsize);
-+ } while (nread < 0 && errno == EINTR);
-+ if (nread <= 0)
-+ return -1;
-+ if (isset(SHINSTDIN) &&
-+ (shinbufendptr = memchr(shinbuffer, '\n', nread))) {
-+ shinbufendptr++;
-+ rsize = (shinbufendptr - shinbuffer);
-+ if (nread > rsize &&
-+ lseek(SHIN, -(nread - rsize), SEEK_CUR) < 0)
-+ zerr("lseek(%d, %d): %e", SHIN, -(nread - rsize), errno);
-+ } else
-+ shinbufendptr = shinbuffer + nread;
-+ return STOUC(*shinbufptr++);
-+ }
-+#endif
- for (;;) {
- errno = 0;
- nread = read(SHIN, shinbufendptr, 1);
-diff --git a/configure.ac b/configure.ac
-index af8c5bba8..42f2837cd 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -2304,6 +2304,65 @@ if test x$zsh_cv_sys_fifo = xyes; then
- AC_DEFINE(HAVE_FIFOS)
- fi
-
-+dnl -----------
-+dnl check that lseek() correctly reports seekability.
-+dnl -----------
-+AC_CACHE_CHECK(if lseek() correctly reports seekability,
-+zsh_cv_sys_lseek,
-+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
-+#include <stdio.h>
-+#include <sys/types.h>
-+#include <fcntl.h>
-+#include <unistd.h>
-+#include <sys/socket.h>
-+#include <sys/stat.h>
-+int main() {
-+ int pipefd[2], fd;
-+ off_t ret;
-+ char* tmpfile = "seekfiletest.tmp";
-+ if ((fd = open(tmpfile, O_CREAT, S_IRUSR)) < 0) {
-+ fprintf(stderr, "creating file failed\n");
-+ return 1;
-+ }
-+ ret = lseek(fd, 0, SEEK_CUR);
-+ close(fd);
-+ unlink(tmpfile);
-+ if (ret == (off_t)-1) {
-+ fprintf(stderr, "lseek on regular file failed\n");
-+ return 1;
-+ }
-+ if (pipe(pipefd) < 0) {
-+ fprintf(stderr, "creating pipe failed\n");
-+ return 1;
-+ }
-+ write(pipefd[1], "abcdefgh", 8);
-+ ret = lseek(pipefd[0], 0, SEEK_CUR);
-+ close(pipefd[0]);
-+ close(pipefd[1]);
-+ if (ret != (off_t)-1) {
-+ fprintf(stderr, "lseek on pipe succeeded\n");
-+ return 1;
-+ }
-+ if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
-+ fprintf(stderr, "creating UNIX domain socket failed\n");
-+ return 1;
-+ }
-+ ret = lseek(fd, 0, SEEK_CUR);
-+ close(fd);
-+ if (ret != (off_t)-1) {
-+ fprintf(stderr, "lseek on UNIX domain socket succeeded\n");
-+ return 1;
-+ }
-+ return 0;
-+}
-+]])],[zsh_cv_sys_lseek=yes],[zsh_cv_sys_lseek=no],[zsh_cv_sys_lseek=yes])
-+])
-+AH_TEMPLATE([USE_LSEEK],
-+[Define to 1 if lseek() can be used for SHIN.])
-+if test x$zsh_cv_sys_lseek = xyes; then
-+ AC_DEFINE(USE_LSEEK)
-+fi
-+
- dnl -----------
- dnl test for whether link() works
- dnl for instance, BeOS R4.51 doesn't support hard links yet
---
-2.36.0
-