diff options
Diffstat (limited to 'debian/patches')
-rw-r--r-- | debian/patches/platform-quirks.diff | 47 | ||||
-rw-r--r-- | debian/patches/series | 7 | ||||
-rw-r--r-- | debian/patches/upstream-0f6227f46b.diff | 42 | ||||
-rw-r--r-- | debian/patches/upstream-168eab11a7.diff | 25 | ||||
-rw-r--r-- | debian/patches/upstream-19344efa78.diff | 34 | ||||
-rw-r--r-- | debian/patches/upstream-39d41d0810.diff | 121 | ||||
-rw-r--r-- | debian/patches/upstream-8f34504736.diff | 551 | ||||
-rw-r--r-- | debian/patches/upstream-bf636d9575.diff | 77 |
8 files changed, 904 insertions, 0 deletions
diff --git a/debian/patches/platform-quirks.diff b/debian/patches/platform-quirks.diff new file mode 100644 index 0000000..e46fe56 --- /dev/null +++ b/debian/patches/platform-quirks.diff @@ -0,0 +1,47 @@ +Description: Platform-specific fixes + * Define PATH_MAX, MAX_IOV for Hurd. + * Add workaround for broken GNU/kFreeBSD system headers. +Author: Karl Ferdinand Ebert <kfebert@gmail.com> +Author: Romain Francoise <rfrancoise@debian.org> +Author: James Clarke <jrtc27@debian.org> +Bug-Debian: http://bugs.debian.org/609333 +Forwarded: not-needed + +--- a/compat.h ++++ b/compat.h +@@ -21,6 +21,20 @@ + #include <sys/ioctl.h> + #include <sys/uio.h> + ++/* ++ * Shouldn't be needed, but GNU/kFreeBSD headers are currently slightly broken. ++ * The glibc limits.h eventually includes the FreeBSD limits-related headers, ++ * which don't define a TTY_NAME_MAX. However, anything (in)directly including ++ * the glibc sys/param.h will include the glibc bits/param.h, which defines ++ * TTY_NAME_MAX as SPECNAMELEN, i.e. 63, which differs from our fallback of 32. ++ * Thus, without this hack, different source files can (and do) end up with ++ * different values for TTY_NAME_MAX, which among other things affects the ++ * layout of struct window_pane due to the tty buffer. ++ */ ++#ifdef __FreeBSD_kernel__ ++#include <sys/param.h> ++#endif ++ + #include <fnmatch.h> + #include <limits.h> + #include <stdio.h> +@@ -289,6 +303,14 @@ void explicit_bzero(void *, size_t); + int getdtablecount(void); + #endif + ++#ifndef PATH_MAX ++#define PATH_MAX 4096 ++#endif ++ ++#ifndef IOV_MAX ++#define IOV_MAX 1024 ++#endif ++ + #ifndef HAVE_CLOSEFROM + /* closefrom.c */ + void closefrom(int); diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..ab389df --- /dev/null +++ b/debian/patches/series @@ -0,0 +1,7 @@ +platform-quirks.diff +upstream-0f6227f46b.diff +upstream-19344efa78.diff +upstream-8f34504736.diff +upstream-39d41d0810.diff +upstream-168eab11a7.diff +upstream-bf636d9575.diff diff --git a/debian/patches/upstream-0f6227f46b.diff b/debian/patches/upstream-0f6227f46b.diff new file mode 100644 index 0000000..c062e60 --- /dev/null +++ b/debian/patches/upstream-0f6227f46b.diff @@ -0,0 +1,42 @@ +commit 0f6227f46b1d33476ef448682a2ba0b0290e6d9b +Author: Nicholas Marriott <nicholas.marriott@gmail.com> +Date: Thu Jun 2 20:41:21 2022 +0000 + + When deleting or renaming a buffer and a buffer name is specified, + complain if the buffer doesn't exist instead of silently deleting or + renaming the most recent buffer. GitHub issue 3205. + +diff --git a/cmd-set-buffer.c b/cmd-set-buffer.c +index 9112683fc0..c9ffe5edad 100644 +--- a/cmd-set-buffer.c ++++ b/cmd-set-buffer.c +@@ -69,8 +69,13 @@ cmd_set_buffer_exec(struct cmd *self, struct cmdq_item *item) + pb = paste_get_name(bufname); + + if (cmd_get_entry(self) == &cmd_delete_buffer_entry) { +- if (pb == NULL) ++ if (pb == NULL) { ++ if (bufname != NULL) { ++ cmdq_error(item, "unknown buffer: %s", bufname); ++ return (CMD_RETURN_ERROR); ++ } + pb = paste_get_top(&bufname); ++ } + if (pb == NULL) { + cmdq_error(item, "no buffer"); + return (CMD_RETURN_ERROR); +@@ -80,8 +85,13 @@ cmd_set_buffer_exec(struct cmd *self, struct cmdq_item *item) + } + + if (args_has(args, 'n')) { +- if (pb == NULL) ++ if (pb == NULL) { ++ if (bufname != NULL) { ++ cmdq_error(item, "unknown buffer: %s", bufname); ++ return (CMD_RETURN_ERROR); ++ } + pb = paste_get_top(&bufname); ++ } + if (pb == NULL) { + cmdq_error(item, "no buffer"); + return (CMD_RETURN_ERROR); diff --git a/debian/patches/upstream-168eab11a7.diff b/debian/patches/upstream-168eab11a7.diff new file mode 100644 index 0000000..be8a90c --- /dev/null +++ b/debian/patches/upstream-168eab11a7.diff @@ -0,0 +1,25 @@ +From 736f7f223235bc050d71565ef243739ef27af066 Mon Sep 17 00:00:00 2001 +From: Nicholas Marriott <nicholas.marriott@gmail.com> +Date: Fri, 28 Apr 2023 07:23:53 +0100 +Subject: [PATCH 3/4] Cast both strings for tparm. + +--- + tty-term.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tty-term.c b/tty-term.c +index 18b174208d..f2b548d811 100644 +--- a/tty-term.c ++++ b/tty-term.c +@@ -839,7 +839,7 @@ tty_term_string_ss(struct tty_term *term, enum tty_code_code code, + #elif defined(HAVE_TIPARM) + s = tiparm(x, a, b); + #else +- s = tparm((char *)x, (long)a, b, 0, 0, 0, 0, 0, 0, 0); ++ s = tparm((char *)x, (long)a, (long)b, 0, 0, 0, 0, 0, 0, 0); + #endif + if (s == NULL) + fatalx("could not expand %s", tty_term_codes[code].name); +-- +2.39.2 + diff --git a/debian/patches/upstream-19344efa78.diff b/debian/patches/upstream-19344efa78.diff new file mode 100644 index 0000000..aa14f19 --- /dev/null +++ b/debian/patches/upstream-19344efa78.diff @@ -0,0 +1,34 @@ +From 19344efa78be23a02008be9da0991f54455c9f9e Mon Sep 17 00:00:00 2001 +From: Nicholas Marriott <nicholas.marriott@gmail.com> +Date: Mon, 22 Aug 2022 08:20:49 +0100 +Subject: [PATCH] Fix fallback implementaion of getpeereid, from Pino Toscano. + +--- + compat/getpeereid.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/compat/getpeereid.c b/compat/getpeereid.c +index c194e886..b79f420a 100644 +--- a/compat/getpeereid.c ++++ b/compat/getpeereid.c +@@ -18,6 +18,7 @@ + #include <sys/socket.h> + + #include <stdio.h> ++#include <unistd.h> + + #ifdef HAVE_UCRED_H + #include <ucred.h> +@@ -49,6 +50,8 @@ getpeereid(int s, uid_t *uid, gid_t *gid) + ucred_free(ucred); + return (0); + #else +- return (getuid()); ++ *uid = geteuid(); ++ *gid = getegid(); ++ return (0); + #endif + } +-- +2.35.1 + diff --git a/debian/patches/upstream-39d41d0810.diff b/debian/patches/upstream-39d41d0810.diff new file mode 100644 index 0000000..8b8abb7 --- /dev/null +++ b/debian/patches/upstream-39d41d0810.diff @@ -0,0 +1,121 @@ +From b77cfc8d2b4d0c894793efaf106b37c17d29d2d0 Mon Sep 17 00:00:00 2001 +From: Nicholas Marriott <nicholas.marriott@gmail.com> +Date: Fri, 28 Apr 2023 06:44:40 +0100 +Subject: [PATCH 2/4] Use ncurses' new tparm_s function (added in 6.4-20230424) + instead of tparm so it does not object to string arguments in capabilities it + doesn't already know. + +--- + configure.ac | 4 ++++ + tty-term.c | 48 +++++++++++++++++++++++++++++++++++++++--------- + 2 files changed, 43 insertions(+), 9 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 2b8b3b11ac..3c3c187393 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -344,6 +344,10 @@ else + AC_MSG_ERROR("curses not found") + fi + fi ++AC_CHECK_FUNCS([ \ ++ tiparm \ ++ tiparm_s \ ++]) + + # Look for utempter. + AC_ARG_ENABLE( +diff --git a/tty-term.c b/tty-term.c +index 32dd849ac7..18b174208d 100644 +--- a/tty-term.c ++++ b/tty-term.c +@@ -764,7 +764,13 @@ tty_term_string_i(struct tty_term *term, enum tty_code_code code, int a) + { + const char *x = tty_term_string(term, code), *s; + +- s = tparm((char *)x, a); ++#if defined(HAVE_TIPARM_S) ++ s = tiparm_s(1, 0, x, a); ++#elif defined(HAVE_TIPARM) ++ s = tiparm(x, a); ++#else ++ s = tparm((char *)x, a, 0, 0, 0, 0, 0, 0, 0, 0); ++#endif + if (s == NULL) + fatalx("could not expand %s", tty_term_codes[code].name); + return (s); +@@ -775,19 +781,31 @@ tty_term_string_ii(struct tty_term *term, enum tty_code_code code, int a, int b) + { + const char *x = tty_term_string(term, code), *s; + +- s = tparm((char *)x, a, b); ++#if defined(HAVE_TIPARM_S) ++ s = tiparm_s(2, 0, x, a, b); ++#elif defined(HAVE_TIPARM) ++ s = tiparm(x, a, b); ++#else ++ s = tparm((char *)x, a, b, 0, 0, 0, 0, 0, 0, 0); ++#endif + if (s == NULL) + fatalx("could not expand %s", tty_term_codes[code].name); + return (s); + } + + const char * +-tty_term_string_iii(struct tty_term *term, enum tty_code_code code, int a, int b, +- int c) ++tty_term_string_iii(struct tty_term *term, enum tty_code_code code, int a, ++ int b, int c) + { + const char *x = tty_term_string(term, code), *s; + +- s = tparm((char *)x, a, b, c); ++#if defined(HAVE_TIPARM_S) ++ s = tiparm_s(3, 0, x, a, b, c); ++#elif defined(HAVE_TIPARM) ++ s = tiparm(x, a, b, c); ++#else ++ s = tparm((char *)x, a, b, c, 0, 0, 0, 0, 0, 0); ++#endif + if (s == NULL) + fatalx("could not expand %s", tty_term_codes[code].name); + return (s); +@@ -798,19 +816,31 @@ tty_term_string_s(struct tty_term *term, enum tty_code_code code, const char *a) + { + const char *x = tty_term_string(term, code), *s; + +- s = tparm((char *)x, (long)a); ++#if defined(HAVE_TIPARM_S) ++ s = tiparm_s(1, 1, x, a); ++#elif defined(HAVE_TIPARM) ++ s = tiparm(x, a); ++#else ++ s = tparm((char *)x, (long)a, 0, 0, 0, 0, 0, 0, 0, 0); ++#endif + if (s == NULL) + fatalx("could not expand %s", tty_term_codes[code].name); + return (s); + } + + const char * +-tty_term_string_ss(struct tty_term *term, enum tty_code_code code, const char *a, +- const char *b) ++tty_term_string_ss(struct tty_term *term, enum tty_code_code code, ++ const char *a, const char *b) + { + const char *x = tty_term_string(term, code), *s; + +- s = tparm((char *)x, (long)a, (long)b); ++#if defined(HAVE_TIPARM_S) ++ s = tiparm_s(2, 3, x, a, b); ++#elif defined(HAVE_TIPARM) ++ s = tiparm(x, a, b); ++#else ++ s = tparm((char *)x, (long)a, b, 0, 0, 0, 0, 0, 0, 0); ++#endif + if (s == NULL) + fatalx("could not expand %s", tty_term_codes[code].name); + return (s); +-- +2.39.2 + diff --git a/debian/patches/upstream-8f34504736.diff b/debian/patches/upstream-8f34504736.diff new file mode 100644 index 0000000..b407d60 --- /dev/null +++ b/debian/patches/upstream-8f34504736.diff @@ -0,0 +1,551 @@ +From fcfd84d75749b53f1adabcedf16c83eccb15c1a1 Mon Sep 17 00:00:00 2001 +From: nicm <nicm> +Date: Tue, 25 Apr 2023 09:31:50 +0000 +Subject: [PATCH 1/4] Tidy tparm wrapper functions to have more obvious names + and check tparm return value. + +--- + tmux.h | 26 ++++++------ + tty-term.c | 47 ++++++++++++++++----- + tty.c | 118 ++++++++++++++++++++++++++--------------------------- + 3 files changed, 108 insertions(+), 83 deletions(-) + +diff --git a/tmux.h b/tmux.h +index 53084b8b07..5a90352e76 100644 +--- a/tmux.h ++++ b/tmux.h +@@ -2250,12 +2250,12 @@ void tty_margin_off(struct tty *); + void tty_cursor(struct tty *, u_int, u_int); + void tty_clipboard_query(struct tty *); + void tty_putcode(struct tty *, enum tty_code_code); +-void tty_putcode1(struct tty *, enum tty_code_code, int); +-void tty_putcode2(struct tty *, enum tty_code_code, int, int); +-void tty_putcode3(struct tty *, enum tty_code_code, int, int, int); +-void tty_putcode_ptr1(struct tty *, enum tty_code_code, const void *); +-void tty_putcode_ptr2(struct tty *, enum tty_code_code, const void *, +- const void *); ++void tty_putcode_i(struct tty *, enum tty_code_code, int); ++void tty_putcode_ii(struct tty *, enum tty_code_code, int, int); ++void tty_putcode_iii(struct tty *, enum tty_code_code, int, int, int); ++void tty_putcode_s(struct tty *, enum tty_code_code, const char *); ++void tty_putcode_ss(struct tty *, enum tty_code_code, const char *, ++ const char *); + void tty_puts(struct tty *, const char *); + void tty_putc(struct tty *, u_char); + void tty_putn(struct tty *, const void *, size_t, u_int); +@@ -2318,15 +2318,15 @@ int tty_term_read_list(const char *, int, char ***, u_int *, + void tty_term_free_list(char **, u_int); + int tty_term_has(struct tty_term *, enum tty_code_code); + const char *tty_term_string(struct tty_term *, enum tty_code_code); +-const char *tty_term_string1(struct tty_term *, enum tty_code_code, int); +-const char *tty_term_string2(struct tty_term *, enum tty_code_code, int, ++const char *tty_term_string_i(struct tty_term *, enum tty_code_code, int); ++const char *tty_term_string_ii(struct tty_term *, enum tty_code_code, int, + int); +-const char *tty_term_string3(struct tty_term *, enum tty_code_code, int, ++const char *tty_term_string_iii(struct tty_term *, enum tty_code_code, int, + int, int); +-const char *tty_term_ptr1(struct tty_term *, enum tty_code_code, +- const void *); +-const char *tty_term_ptr2(struct tty_term *, enum tty_code_code, +- const void *, const void *); ++const char *tty_term_string_s(struct tty_term *, enum tty_code_code, ++ const char *); ++const char *tty_term_string_ss(struct tty_term *, enum tty_code_code, ++ const char *, const char *); + int tty_term_number(struct tty_term *, enum tty_code_code); + int tty_term_flag(struct tty_term *, enum tty_code_code); + const char *tty_term_describe(struct tty_term *, enum tty_code_code); +diff --git a/tty-term.c b/tty-term.c +index fdf0c4faf2..32dd849ac7 100644 +--- a/tty-term.c ++++ b/tty-term.c +@@ -760,35 +760,60 @@ tty_term_string(struct tty_term *term, enum tty_code_code code) + } + + const char * +-tty_term_string1(struct tty_term *term, enum tty_code_code code, int a) ++tty_term_string_i(struct tty_term *term, enum tty_code_code code, int a) + { +- return (tparm((char *) tty_term_string(term, code), a, 0, 0, 0, 0, 0, 0, 0, 0)); ++ const char *x = tty_term_string(term, code), *s; ++ ++ s = tparm((char *)x, a); ++ if (s == NULL) ++ fatalx("could not expand %s", tty_term_codes[code].name); ++ return (s); + } + + const char * +-tty_term_string2(struct tty_term *term, enum tty_code_code code, int a, int b) ++tty_term_string_ii(struct tty_term *term, enum tty_code_code code, int a, int b) + { +- return (tparm((char *) tty_term_string(term, code), a, b, 0, 0, 0, 0, 0, 0, 0)); ++ const char *x = tty_term_string(term, code), *s; ++ ++ s = tparm((char *)x, a, b); ++ if (s == NULL) ++ fatalx("could not expand %s", tty_term_codes[code].name); ++ return (s); + } + + const char * +-tty_term_string3(struct tty_term *term, enum tty_code_code code, int a, int b, ++tty_term_string_iii(struct tty_term *term, enum tty_code_code code, int a, int b, + int c) + { +- return (tparm((char *) tty_term_string(term, code), a, b, c, 0, 0, 0, 0, 0, 0)); ++ const char *x = tty_term_string(term, code), *s; ++ ++ s = tparm((char *)x, a, b, c); ++ if (s == NULL) ++ fatalx("could not expand %s", tty_term_codes[code].name); ++ return (s); + } + + const char * +-tty_term_ptr1(struct tty_term *term, enum tty_code_code code, const void *a) ++tty_term_string_s(struct tty_term *term, enum tty_code_code code, const char *a) + { +- return (tparm((char *) tty_term_string(term, code), (long)a, 0, 0, 0, 0, 0, 0, 0, 0)); ++ const char *x = tty_term_string(term, code), *s; ++ ++ s = tparm((char *)x, (long)a); ++ if (s == NULL) ++ fatalx("could not expand %s", tty_term_codes[code].name); ++ return (s); + } + + const char * +-tty_term_ptr2(struct tty_term *term, enum tty_code_code code, const void *a, +- const void *b) ++tty_term_string_ss(struct tty_term *term, enum tty_code_code code, const char *a, ++ const char *b) + { +- return (tparm((char *) tty_term_string(term, code), (long)a, (long)b, 0, 0, 0, 0, 0, 0, 0)); ++ const char *x = tty_term_string(term, code), *s; ++ ++ s = tparm((char *)x, (long)a, (long)b); ++ if (s == NULL) ++ fatalx("could not expand %s", tty_term_codes[code].name); ++ return (s); + } + + int +diff --git a/tty.c b/tty.c +index 49cf9795f7..a4d744d0df 100644 +--- a/tty.c ++++ b/tty.c +@@ -399,7 +399,7 @@ tty_stop_tty(struct tty *tty) + if (tcsetattr(c->fd, TCSANOW, &tty->tio) == -1) + return; + +- tty_raw(tty, tty_term_string2(tty->term, TTYC_CSR, 0, ws.ws_row - 1)); ++ tty_raw(tty, tty_term_string_ii(tty->term, TTYC_CSR, 0, ws.ws_row - 1)); + if (tty_acs_needed(tty)) + tty_raw(tty, tty_term_string(tty->term, TTYC_RMACS)); + tty_raw(tty, tty_term_string(tty->term, TTYC_SGR0)); +@@ -409,7 +409,7 @@ tty_stop_tty(struct tty *tty) + if (tty_term_has(tty->term, TTYC_SE)) + tty_raw(tty, tty_term_string(tty->term, TTYC_SE)); + else if (tty_term_has(tty->term, TTYC_SS)) +- tty_raw(tty, tty_term_string1(tty->term, TTYC_SS, 0)); ++ tty_raw(tty, tty_term_string_i(tty->term, TTYC_SS, 0)); + } + if (tty->mode & MODE_BRACKETPASTE) + tty_raw(tty, tty_term_string(tty->term, TTYC_DSBP)); +@@ -506,42 +506,42 @@ tty_putcode(struct tty *tty, enum tty_code_code code) + } + + void +-tty_putcode1(struct tty *tty, enum tty_code_code code, int a) ++tty_putcode_i(struct tty *tty, enum tty_code_code code, int a) + { + if (a < 0) + return; +- tty_puts(tty, tty_term_string1(tty->term, code, a)); ++ tty_puts(tty, tty_term_string_i(tty->term, code, a)); + } + + void +-tty_putcode2(struct tty *tty, enum tty_code_code code, int a, int b) ++tty_putcode_ii(struct tty *tty, enum tty_code_code code, int a, int b) + { + if (a < 0 || b < 0) + return; +- tty_puts(tty, tty_term_string2(tty->term, code, a, b)); ++ tty_puts(tty, tty_term_string_ii(tty->term, code, a, b)); + } + + void +-tty_putcode3(struct tty *tty, enum tty_code_code code, int a, int b, int c) ++tty_putcode_iii(struct tty *tty, enum tty_code_code code, int a, int b, int c) + { + if (a < 0 || b < 0 || c < 0) + return; +- tty_puts(tty, tty_term_string3(tty->term, code, a, b, c)); ++ tty_puts(tty, tty_term_string_iii(tty->term, code, a, b, c)); + } + + void +-tty_putcode_ptr1(struct tty *tty, enum tty_code_code code, const void *a) ++tty_putcode_s(struct tty *tty, enum tty_code_code code, const char *a) + { + if (a != NULL) +- tty_puts(tty, tty_term_ptr1(tty->term, code, a)); ++ tty_puts(tty, tty_term_string_s(tty->term, code, a)); + } + + void +-tty_putcode_ptr2(struct tty *tty, enum tty_code_code code, const void *a, +- const void *b) ++tty_putcode_ss(struct tty *tty, enum tty_code_code code, const char *a, ++ const char *b) + { + if (a != NULL && b != NULL) +- tty_puts(tty, tty_term_ptr2(tty->term, code, a, b)); ++ tty_puts(tty, tty_term_string_ss(tty->term, code, a, b)); + } + + static void +@@ -603,7 +603,7 @@ tty_putc(struct tty *tty, u_char ch) + * it works on sensible terminals as well. + */ + if (tty->term->flags & TERM_NOAM) +- tty_putcode2(tty, TTYC_CUP, tty->cy, tty->cx); ++ tty_putcode_ii(tty, TTYC_CUP, tty->cy, tty->cx); + } else + tty->cx++; + } +@@ -682,7 +682,7 @@ tty_force_cursor_colour(struct tty *tty, int c) + else { + colour_split_rgb(c, &r, &g, &b); + xsnprintf(s, sizeof s, "rgb:%02hhx/%02hhx/%02hhx", r, g, b); +- tty_putcode_ptr1(tty, TTYC_CS, s); ++ tty_putcode_s(tty, TTYC_CS, s); + } + tty->ccolour = c; + } +@@ -743,7 +743,7 @@ tty_update_cursor(struct tty *tty, int mode, struct screen *s) + if (tty_term_has(tty->term, TTYC_SE)) + tty_putcode(tty, TTYC_SE); + else +- tty_putcode1(tty, TTYC_SS, 0); ++ tty_putcode_i(tty, TTYC_SS, 0); + } + if (cmode & (MODE_CURSOR_BLINKING|MODE_CURSOR_VERY_VISIBLE)) + tty_putcode(tty, TTYC_CVVIS); +@@ -751,27 +751,27 @@ tty_update_cursor(struct tty *tty, int mode, struct screen *s) + case SCREEN_CURSOR_BLOCK: + if (tty_term_has(tty->term, TTYC_SS)) { + if (cmode & MODE_CURSOR_BLINKING) +- tty_putcode1(tty, TTYC_SS, 1); ++ tty_putcode_i(tty, TTYC_SS, 1); + else +- tty_putcode1(tty, TTYC_SS, 2); ++ tty_putcode_i(tty, TTYC_SS, 2); + } else if (cmode & MODE_CURSOR_BLINKING) + tty_putcode(tty, TTYC_CVVIS); + break; + case SCREEN_CURSOR_UNDERLINE: + if (tty_term_has(tty->term, TTYC_SS)) { + if (cmode & MODE_CURSOR_BLINKING) +- tty_putcode1(tty, TTYC_SS, 3); ++ tty_putcode_i(tty, TTYC_SS, 3); + else +- tty_putcode1(tty, TTYC_SS, 4); ++ tty_putcode_i(tty, TTYC_SS, 4); + } else if (cmode & MODE_CURSOR_BLINKING) + tty_putcode(tty, TTYC_CVVIS); + break; + case SCREEN_CURSOR_BAR: + if (tty_term_has(tty->term, TTYC_SS)) { + if (cmode & MODE_CURSOR_BLINKING) +- tty_putcode1(tty, TTYC_SS, 5); ++ tty_putcode_i(tty, TTYC_SS, 5); + else +- tty_putcode1(tty, TTYC_SS, 6); ++ tty_putcode_i(tty, TTYC_SS, 6); + } else if (cmode & MODE_CURSOR_BLINKING) + tty_putcode(tty, TTYC_CVVIS); + break; +@@ -833,7 +833,7 @@ tty_emulate_repeat(struct tty *tty, enum tty_code_code code, + enum tty_code_code code1, u_int n) + { + if (tty_term_has(tty->term, code)) +- tty_putcode1(tty, code, n); ++ tty_putcode_i(tty, code, n); + else { + while (n-- > 0) + tty_putcode(tty, code1); +@@ -1122,7 +1122,7 @@ tty_clear_line(struct tty *tty, const struct grid_cell *defaults, u_int py, + /* Section of line. Use ECH if possible. */ + if (tty_term_has(tty->term, TTYC_ECH)) { + tty_cursor(tty, px, py); +- tty_putcode1(tty, TTYC_ECH, nx); ++ tty_putcode_i(tty, TTYC_ECH, nx); + return; + } + } +@@ -1263,7 +1263,7 @@ tty_clear_area(struct tty *tty, const struct grid_cell *defaults, u_int py, + tty_term_has(tty->term, TTYC_INDN)) { + tty_region(tty, py, py + ny - 1); + tty_margin_off(tty); +- tty_putcode1(tty, TTYC_INDN, ny); ++ tty_putcode_i(tty, TTYC_INDN, ny); + return; + } + +@@ -1278,7 +1278,7 @@ tty_clear_area(struct tty *tty, const struct grid_cell *defaults, u_int py, + tty_term_has(tty->term, TTYC_INDN)) { + tty_region(tty, py, py + ny - 1); + tty_margin(tty, px, px + nx - 1); +- tty_putcode1(tty, TTYC_INDN, ny); ++ tty_putcode_i(tty, TTYC_INDN, ny); + return; + } + } +@@ -1579,7 +1579,7 @@ tty_sync_start(struct tty *tty) + + if (tty_term_has(tty->term, TTYC_SYNC)) { + log_debug("%s sync start", tty->client->name); +- tty_putcode1(tty, TTYC_SYNC, 1); ++ tty_putcode_i(tty, TTYC_SYNC, 1); + } + } + +@@ -1594,7 +1594,7 @@ tty_sync_end(struct tty *tty) + + if (tty_term_has(tty->term, TTYC_SYNC)) { + log_debug("%s sync end", tty->client->name); +- tty_putcode1(tty, TTYC_SYNC, 2); ++ tty_putcode_i(tty, TTYC_SYNC, 2); + } + } + +@@ -1793,7 +1793,7 @@ tty_cmd_reverseindex(struct tty *tty, const struct tty_ctx *ctx) + if (tty_term_has(tty->term, TTYC_RI)) + tty_putcode(tty, TTYC_RI); + else +- tty_putcode1(tty, TTYC_RIN, 1); ++ tty_putcode_i(tty, TTYC_RIN, 1); + } + + void +@@ -1872,7 +1872,7 @@ tty_cmd_scrollup(struct tty *tty, const struct tty_ctx *ctx) + tty_cursor(tty, 0, 0); + else + tty_cursor(tty, 0, tty->cy); +- tty_putcode1(tty, TTYC_INDN, ctx->num); ++ tty_putcode_i(tty, TTYC_INDN, ctx->num); + } + } + +@@ -1902,7 +1902,7 @@ tty_cmd_scrolldown(struct tty *tty, const struct tty_ctx *ctx) + tty_cursor_pane(tty, ctx, ctx->ocx, ctx->orupper); + + if (tty_term_has(tty->term, TTYC_RIN)) +- tty_putcode1(tty, TTYC_RIN, ctx->num); ++ tty_putcode_i(tty, TTYC_RIN, ctx->num); + else { + for (i = 0; i < ctx->num; i++) + tty_putcode(tty, TTYC_RI); +@@ -2101,7 +2101,7 @@ tty_set_selection(struct tty *tty, const char *buf, size_t len) + + b64_ntop(buf, len, encoded, size); + tty->flags |= TTY_NOBLOCK; +- tty_putcode_ptr2(tty, TTYC_MS, "", encoded); ++ tty_putcode_ss(tty, TTYC_MS, "", encoded); + + free(encoded); + } +@@ -2246,7 +2246,7 @@ tty_region(struct tty *tty, u_int rupper, u_int rlower) + tty_cursor(tty, 0, tty->cy); + } + +- tty_putcode2(tty, TTYC_CSR, tty->rupper, tty->rlower); ++ tty_putcode_ii(tty, TTYC_CSR, tty->rupper, tty->rlower); + tty->cx = tty->cy = UINT_MAX; + } + +@@ -2274,7 +2274,7 @@ tty_margin(struct tty *tty, u_int rleft, u_int rright) + if (tty->rleft == rleft && tty->rright == rright) + return; + +- tty_putcode2(tty, TTYC_CSR, tty->rupper, tty->rlower); ++ tty_putcode_ii(tty, TTYC_CSR, tty->rupper, tty->rlower); + + tty->rleft = rleft; + tty->rright = rright; +@@ -2282,7 +2282,7 @@ tty_margin(struct tty *tty, u_int rleft, u_int rright) + if (rleft == 0 && rright == tty->sx - 1) + tty_putcode(tty, TTYC_CLMG); + else +- tty_putcode2(tty, TTYC_CMG, rleft, rright); ++ tty_putcode_ii(tty, TTYC_CMG, rleft, rright); + tty->cx = tty->cy = UINT_MAX; + } + +@@ -2392,7 +2392,7 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy) + * the cursor with CUB/CUF. + */ + if ((u_int) abs(change) > cx && tty_term_has(term, TTYC_HPA)) { +- tty_putcode1(tty, TTYC_HPA, cx); ++ tty_putcode_i(tty, TTYC_HPA, cx); + goto out; + } else if (change > 0 && + tty_term_has(term, TTYC_CUB) && +@@ -2402,12 +2402,12 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy) + tty_putcode(tty, TTYC_CUB1); + goto out; + } +- tty_putcode1(tty, TTYC_CUB, change); ++ tty_putcode_i(tty, TTYC_CUB, change); + goto out; + } else if (change < 0 && + tty_term_has(term, TTYC_CUF) && + !tty_use_margin(tty)) { +- tty_putcode1(tty, TTYC_CUF, -change); ++ tty_putcode_i(tty, TTYC_CUF, -change); + goto out; + } + } else if (cx == thisx) { +@@ -2440,21 +2440,21 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy) + (change < 0 && cy - change > tty->rlower) || + (change > 0 && cy - change < tty->rupper)) { + if (tty_term_has(term, TTYC_VPA)) { +- tty_putcode1(tty, TTYC_VPA, cy); ++ tty_putcode_i(tty, TTYC_VPA, cy); + goto out; + } + } else if (change > 0 && tty_term_has(term, TTYC_CUU)) { +- tty_putcode1(tty, TTYC_CUU, change); ++ tty_putcode_i(tty, TTYC_CUU, change); + goto out; + } else if (change < 0 && tty_term_has(term, TTYC_CUD)) { +- tty_putcode1(tty, TTYC_CUD, -change); ++ tty_putcode_i(tty, TTYC_CUD, -change); + goto out; + } + } + + absolute: + /* Absolute movement. */ +- tty_putcode2(tty, TTYC_CUP, cy, cx); ++ tty_putcode_ii(tty, TTYC_CUP, cy, cx); + + out: + tty->cx = cx; +@@ -2533,13 +2533,13 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc, + !tty_term_has(tty->term, TTYC_SMULX)) + tty_putcode(tty, TTYC_SMUL); + else if (changed & GRID_ATTR_UNDERSCORE_2) +- tty_putcode1(tty, TTYC_SMULX, 2); ++ tty_putcode_i(tty, TTYC_SMULX, 2); + else if (changed & GRID_ATTR_UNDERSCORE_3) +- tty_putcode1(tty, TTYC_SMULX, 3); ++ tty_putcode_i(tty, TTYC_SMULX, 3); + else if (changed & GRID_ATTR_UNDERSCORE_4) +- tty_putcode1(tty, TTYC_SMULX, 4); ++ tty_putcode_i(tty, TTYC_SMULX, 4); + else if (changed & GRID_ATTR_UNDERSCORE_5) +- tty_putcode1(tty, TTYC_SMULX, 5); ++ tty_putcode_i(tty, TTYC_SMULX, 5); + } + if (changed & GRID_ATTR_BLINK) + tty_putcode(tty, TTYC_BLINK); +@@ -2593,14 +2593,14 @@ tty_colours(struct tty *tty, const struct grid_cell *gc) + if (have_ax) + tty_puts(tty, "\033[39m"); + else if (tc->fg != 7) +- tty_putcode1(tty, TTYC_SETAF, 7); ++ tty_putcode_i(tty, TTYC_SETAF, 7); + tc->fg = gc->fg; + } + if (COLOUR_DEFAULT(gc->bg) && !COLOUR_DEFAULT(tc->bg)) { + if (have_ax) + tty_puts(tty, "\033[49m"); + else if (tc->bg != 0) +- tty_putcode1(tty, TTYC_SETAB, 0); ++ tty_putcode_i(tty, TTYC_SETAB, 0); + tc->bg = gc->bg; + } + } +@@ -2768,12 +2768,12 @@ tty_colours_fg(struct tty *tty, const struct grid_cell *gc) + xsnprintf(s, sizeof s, "\033[%dm", gc->fg); + tty_puts(tty, s); + } else +- tty_putcode1(tty, TTYC_SETAF, gc->fg - 90 + 8); ++ tty_putcode_i(tty, TTYC_SETAF, gc->fg - 90 + 8); + goto save; + } + + /* Otherwise set the foreground colour. */ +- tty_putcode1(tty, TTYC_SETAF, gc->fg); ++ tty_putcode_i(tty, TTYC_SETAF, gc->fg); + + save: + /* Save the new values in the terminal current cell. */ +@@ -2800,12 +2800,12 @@ tty_colours_bg(struct tty *tty, const struct grid_cell *gc) + xsnprintf(s, sizeof s, "\033[%dm", gc->bg + 10); + tty_puts(tty, s); + } else +- tty_putcode1(tty, TTYC_SETAB, gc->bg - 90 + 8); ++ tty_putcode_i(tty, TTYC_SETAB, gc->bg - 90 + 8); + goto save; + } + + /* Otherwise set the background colour. */ +- tty_putcode1(tty, TTYC_SETAB, gc->bg); ++ tty_putcode_i(tty, TTYC_SETAB, gc->bg); + + save: + /* Save the new values in the terminal current cell. */ +@@ -2841,10 +2841,10 @@ tty_colours_us(struct tty *tty, const struct grid_cell *gc) + * non-RGB version may be wrong. + */ + if (tty_term_has(tty->term, TTYC_SETULC)) +- tty_putcode1(tty, TTYC_SETULC, c); ++ tty_putcode_i(tty, TTYC_SETULC, c); + else if (tty_term_has(tty->term, TTYC_SETAL) && + tty_term_has(tty->term, TTYC_RGB)) +- tty_putcode1(tty, TTYC_SETAL, c); ++ tty_putcode_i(tty, TTYC_SETAL, c); + + save: + /* Save the new values in the terminal current cell. */ +@@ -2858,18 +2858,18 @@ tty_try_colour(struct tty *tty, int colour, const char *type) + + if (colour & COLOUR_FLAG_256) { + if (*type == '3' && tty_term_has(tty->term, TTYC_SETAF)) +- tty_putcode1(tty, TTYC_SETAF, colour & 0xff); ++ tty_putcode_i(tty, TTYC_SETAF, colour & 0xff); + else if (tty_term_has(tty->term, TTYC_SETAB)) +- tty_putcode1(tty, TTYC_SETAB, colour & 0xff); ++ tty_putcode_i(tty, TTYC_SETAB, colour & 0xff); + return (0); + } + + if (colour & COLOUR_FLAG_RGB) { + colour_split_rgb(colour & 0xffffff, &r, &g, &b); + if (*type == '3' && tty_term_has(tty->term, TTYC_SETRGBF)) +- tty_putcode3(tty, TTYC_SETRGBF, r, g, b); ++ tty_putcode_iii(tty, TTYC_SETRGBF, r, g, b); + else if (tty_term_has(tty->term, TTYC_SETRGBB)) +- tty_putcode3(tty, TTYC_SETRGBB, r, g, b); ++ tty_putcode_iii(tty, TTYC_SETRGBB, r, g, b); + return (0); + } + +@@ -2953,7 +2953,7 @@ tty_clipboard_query(struct tty *tty) + + if ((~tty->flags & TTY_STARTED) || (tty->flags & TTY_OSC52QUERY)) + return; +- tty_putcode_ptr2(tty, TTYC_MS, "", "?"); ++ tty_putcode_ss(tty, TTYC_MS, "", "?"); + + tty->flags |= TTY_OSC52QUERY; + evtimer_set(&tty->clipboard_timer, tty_clipboard_query_callback, tty); +-- +2.39.2 + diff --git a/debian/patches/upstream-bf636d9575.diff b/debian/patches/upstream-bf636d9575.diff new file mode 100644 index 0000000..551b36b --- /dev/null +++ b/debian/patches/upstream-bf636d9575.diff @@ -0,0 +1,77 @@ +From 624b9567c70976766065c826b73234925b052595 Mon Sep 17 00:00:00 2001 +From: nicm <nicm> +Date: Fri, 28 Apr 2023 05:59:35 +0000 +Subject: [PATCH 4/4] Do not fatal if tparm fails, instead just log it (not + working sequences are better than exiting). + +--- + tty-term.c | 32 ++++++++++++++++++++++---------- + 1 file changed, 22 insertions(+), 10 deletions(-) + +--- a/tty-term.c ++++ b/tty-term.c +@@ -771,8 +771,10 @@ + #else + s = tparm((char *)x, a, 0, 0, 0, 0, 0, 0, 0, 0); + #endif +- if (s == NULL) +- fatalx("could not expand %s", tty_term_codes[code].name); ++ if (s == NULL) { ++ log_debug("could not expand %s", tty_term_codes[code].name); ++ return (""); ++ } + return (s); + } + +@@ -788,8 +790,10 @@ + #else + s = tparm((char *)x, a, b, 0, 0, 0, 0, 0, 0, 0); + #endif +- if (s == NULL) +- fatalx("could not expand %s", tty_term_codes[code].name); ++ if (s == NULL) { ++ log_debug("could not expand %s", tty_term_codes[code].name); ++ return (""); ++ } + return (s); + } + +@@ -806,8 +810,10 @@ + #else + s = tparm((char *)x, a, b, c, 0, 0, 0, 0, 0, 0); + #endif +- if (s == NULL) +- fatalx("could not expand %s", tty_term_codes[code].name); ++ if (s == NULL) { ++ log_debug("could not expand %s", tty_term_codes[code].name); ++ return (""); ++ } + return (s); + } + +@@ -823,8 +829,10 @@ + #else + s = tparm((char *)x, (long)a, 0, 0, 0, 0, 0, 0, 0, 0); + #endif +- if (s == NULL) +- fatalx("could not expand %s", tty_term_codes[code].name); ++ if (s == NULL) { ++ log_debug("could not expand %s", tty_term_codes[code].name); ++ return (""); ++ } + return (s); + } + +@@ -841,8 +849,10 @@ + #else + s = tparm((char *)x, (long)a, (long)b, 0, 0, 0, 0, 0, 0, 0); + #endif +- if (s == NULL) +- fatalx("could not expand %s", tty_term_codes[code].name); ++ if (s == NULL) { ++ log_debug("could not expand %s", tty_term_codes[code].name); ++ return (""); ++ } + return (s); + } + |