Control: tags -1 +patch Control: tags -1 +upstream Hi Pranav,
On Mon, 2026-05-04 at 12:11 +0200, John Paul Adrian Glaubitz wrote: > Hi Pranav, > > On Mon, 2026-05-04 at 09:46 +0000, Pranav P wrote: > > There seems to be a fix for this here in > > https://savannah.gnu.org/bugs/?67607 > > (https://cgit.git.savannah.gnu.org/cgit/screen.git/diff/?h=screen-v5&id=ccd0b27504707e4f3099f0b9fd7a89489c6973fb) > > > > I have tested this patch on my s390x machine and it does seem to work fine. > > Thanks for the heads-up! I'll test it on both big-endian PowerPC and SPARC. I can confirm that the attached patch extracted from the commit above fixes the problem. Adrian -- .''`. John Paul Adrian Glaubitz : :' : Debian Developer `. `' Physicist `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913
From ccd0b27504707e4f3099f0b9fd7a89489c6973fb Mon Sep 17 00:00:00 2001 From: Alexander Naumov <[email protected]> Date: Sat, 3 Jan 2026 17:26:27 +0100 Subject: Fix: unable to type in screen on big-endian systems MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thanks to Petr Sumbera <[email protected]> and Dan Horák <[email protected]> bug#67607 --- src/telnet.c | 2 +- src/telnet.h | 2 +- src/window.c | 38 +++++++++++++++++++------------------- src/window.h | 6 +++--- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/telnet.c b/src/telnet.c index 69d75ee..c70e2da 100644 --- a/src/telnet.c +++ b/src/telnet.c @@ -228,7 +228,7 @@ void TelProcessLine(char **bufpp, size_t *lenp) *lenp = 0; } -int DoTelnet(char *buf, size_t *lenp, int f) +int DoTelnet(char *buf, int *lenp, int f) { int echo = !fore->w_telropts[TO_ECHO]; int cmode = fore->w_telropts[TO_SGA]; diff --git a/src/telnet.h b/src/telnet.h index fefcc0a..792a93a 100644 --- a/src/telnet.h +++ b/src/telnet.h @@ -9,7 +9,7 @@ int TelOpenAndConnect(Window *); int TelIsline(Window *); void TelProcessLine(char **, size_t *); -int DoTelnet(char *, size_t *, int); +int DoTelnet(char *, int *, int); int TelIn(Window *, char *, size_t, int); void TelBreak(Window *); void TelWindowSize(Window *); diff --git a/src/window.c b/src/window.c index cee06fd..68fc006 100644 --- a/src/window.c +++ b/src/window.c @@ -61,7 +61,7 @@ static void WinRedisplayLine(int, int, int, int); static void WinClearLine(int, int, int, int); static int WinResize(int, int); static void WinRestore(void); -static int DoAutolf(char *, size_t *, int); +static int DoAutolf(char *, int *, int); static void ZombieProcess(char **, size_t *); static void win_readev_fn(Event *, void *); static void win_writeev_fn(Event *, void *); @@ -74,9 +74,9 @@ static void win_silenceev_fn(Event *, void *); static void win_destroyev_fn(Event *, void *); static int ForkWindow(Window *, char **, char *); -static void zmodem_found(Window *, int, char *, size_t); +static void zmodem_found(Window *, int, char *, int); static void zmodemFin(char *, size_t, void *); -static int zmodem_parse(Window *, char *, size_t); +static int zmodem_parse(Window *, char *, int); bool VerboseCreate = false; /* XXX move this to user.h */ @@ -191,10 +191,10 @@ const struct LayFuncs WinLf = { NULL }; -static int DoAutolf(char *buf, size_t *lenp, int fr) +static int DoAutolf(char *buf, int *lenp, int fr) { char *p; - size_t len = *lenp; + int len = *lenp; int trunc = 0; for (p = buf; len > 0; p++, len--) { @@ -215,7 +215,7 @@ static int DoAutolf(char *buf, size_t *lenp, int fr) static void WinProcess(char **bufpp, size_t *lenp) { - size_t l2 = 0, f, *ilen, l = *lenp, trunc; + int l2 = 0, f, *ilen, l = *lenp, trunc; char *ibuf; fore = (Window *)flayer->l_data; @@ -291,7 +291,7 @@ static void WinProcess(char **bufpp, size_t *lenp) static void ZombieProcess(char **bufpp, size_t *lenp) { - size_t l = *lenp; + int l = *lenp; char *buf = *bufpp, b1[10], b2[10]; fore = (Window *)flayer->l_data; @@ -699,7 +699,7 @@ int MakeWindow(struct NewWindow *newwin) p->w_readev.data = p->w_writeev.data = (char *)p; p->w_readev.handler = win_readev_fn; p->w_writeev.handler = win_writeev_fn; - p->w_writeev.condpos = (int *)&p->w_inlen; + p->w_writeev.condpos = &p->w_inlen; evenq(&p->w_readev); evenq(&p->w_writeev); p->w_paster.pa_slowev.type = EV_TIMEOUT; @@ -1344,7 +1344,7 @@ int winexec(char **av) pwin->p_readev.data = pwin->p_writeev.data = (char *)w; pwin->p_readev.handler = pseu_readev_fn; pwin->p_writeev.handler = pseu_writeev_fn; - pwin->p_writeev.condpos = (int *)&pwin->p_inlen; + pwin->p_writeev.condpos = &pwin->p_inlen; if (pwin->p_fdpat & (F_PFRONT << F_PSHIFT * 2 | F_PFRONT << F_PSHIFT)) evenq(&pwin->p_readev); evenq(&pwin->p_writeev); @@ -1378,7 +1378,7 @@ void FreePseudowin(Window *w) } evdeq(&pwin->p_readev); evdeq(&pwin->p_writeev); - if (w->w_readev.condneg == (int *)&pwin->p_inlen) + if (w->w_readev.condneg == &pwin->p_inlen) w->w_readev.condpos = w->w_readev.condneg = NULL; evenq(&w->w_readev); free((char *)pwin); @@ -1484,7 +1484,7 @@ static void win_readev_fn(Event *event, void *data) size = IOSIZE - p->w_pwin->p_inlen; if (size <= 0) { event->condpos = &const_IOSIZE; - event->condneg = (int *)&p->w_pwin->p_inlen; + event->condneg = &p->w_pwin->p_inlen; return; } } @@ -1563,7 +1563,7 @@ static void win_resurrect_zombie_fn(Event *event, void *data) static void win_writeev_fn(Event *event, void *data) { Window *p = (Window *)data; - size_t len; + int len; if (p->w_inlen) { if ((len = write(event->fd, p->w_inbuf, p->w_inlen)) <= 0) len = p->w_inlen; /* dead window */ @@ -1600,7 +1600,7 @@ static void pseu_readev_fn(Event *event, void *data) size = IOSIZE - p->w_inlen; if (size <= 0) { event->condpos = &const_IOSIZE; - event->condneg = (int *)&p->w_inlen; + event->condneg = &p->w_inlen; return; } } @@ -1643,7 +1643,7 @@ static void pseu_writeev_fn(Event *event, void *data) { Window *p = (Window *)data; struct pseudowin *pw = p->w_pwin; - size_t len; + int len; if (pw->p_inlen == 0) return; @@ -1683,10 +1683,10 @@ static void win_destroyev_fn(Event *event, void *data) WindowDied(p, p->w_exitstatus, 1); } -static int zmodem_parse(Window *p, char *bp, size_t len) +static int zmodem_parse(Window *p, char *bp, int len) { char *b2 = bp; - for (size_t i = 0; i < len; i++, b2++) { + for (int i = 0; i < len; i++, b2++) { if (p->w_zauto == 0) { for (; i < len; i++, b2++) if (*b2 == 030) @@ -1756,14 +1756,14 @@ static void zmodemFin(char *buf, size_t len, void *data) } } -static void zmodem_found(Window *p, int send, char *bp, size_t len) +static void zmodem_found(Window *p, int send, char *bp, int len) { char *s; size_t n; /* check for abort sequence */ n = 0; - for (size_t i = 0; i < len; i++) + for (int i = 0; i < len; i++) if (bp[i] != 030) n = 0; else if (++n > 4) @@ -1792,7 +1792,7 @@ static void zmodem_found(Window *p, int send, char *bp, size_t len) display = d; evdeq(&D_blockedev); D_readev.condpos = &const_IOSIZE; - D_readev.condneg = (int *)&p->w_inlen; + D_readev.condneg = &p->w_inlen; ClearAll(); GotoPos(0, 0); SetRendition(&mchar_blank); diff --git a/src/window.h b/src/window.h index 3834650..e1c1a68 100644 --- a/src/window.h +++ b/src/window.h @@ -79,7 +79,7 @@ struct pseudowin { char p_cmd[MAXSTR]; char p_tty[MAXSTR]; char p_inbuf[IOSIZE]; /* buffered writing to p_ptyfd */ - size_t p_inlen; + int p_inlen; }; /* bits for fdpat: */ @@ -157,9 +157,9 @@ struct Window { int w_poll_zombie_timeout; int w_ptyfd; /* fd of the master pty */ char w_inbuf[IOSIZE]; - size_t w_inlen; + int w_inlen; char w_outbuf[IOSIZE]; - size_t w_outlen; + int w_outlen; bool w_aflag; /* (-a option) */ bool w_dynamicaka; /* should we change name */ char *w_title; /* name of the window */ -- cgit v1.2.3

