From be806c5948e7db63ba2970c1146aaf38de656fb1d6ba9298af969d1ba8ce09d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Schr=C3=B6der?= Date: Fri, 13 Sep 2013 13:59:02 +0000 Subject: [PATCH] - update to current 4.0.4 git OBS-URL: https://build.opensuse.org/package/show/Base:System/screen?expand=0&rev=48 --- mappedcmd.diff | 31 ------ screen-4.0.4.tar.gz | 4 +- screen-poll-zombies.patch | 91 ++++++---------- screen.changes | 14 +++ screen.spec | 16 +-- ...patch => screen_enhance_windows_list.patch | 103 +++++++----------- screen_enhance_windows_list_1_3.patch | 60 ---------- ...tring_escapes_to_nearly_old_behavior.patch | 19 ---- show_all_active.patch | 37 +++---- styroptcrash.diff | 19 ---- 10 files changed, 109 insertions(+), 285 deletions(-) delete mode 100644 mappedcmd.diff rename screen_enhance_windows_list_2_3.patch => screen_enhance_windows_list.patch (55%) delete mode 100644 screen_enhance_windows_list_1_3.patch delete mode 100644 screen_fix_wW_string_escapes_to_nearly_old_behavior.patch delete mode 100644 styroptcrash.diff diff --git a/mappedcmd.diff b/mappedcmd.diff deleted file mode 100644 index 8538685..0000000 --- a/mappedcmd.diff +++ /dev/null @@ -1,31 +0,0 @@ -commit ae3e007da3f50e9f4e3c4244e12fce5fcd3774db -Author: Michael Schroeder -Date: Tue Aug 7 17:05:15 2012 +0200 - - make ^A DEL work again - - It was broken because we discarded all mapped sequences. Now we - let sequences with length 1 through to ProcessInput2. - -diff --git a/src/process.c b/src/process.c -index d86c62c..bdf9355 100644 ---- a/src/process.c -+++ b/src/process.c -@@ -6472,6 +6472,7 @@ int i; - { - struct action *act; - int discard = 0; -+ int keyno = i; - - debug1("StuffKey #%d", i); - #ifdef DEBUG -@@ -6511,6 +6512,9 @@ int i; - - if (discard && (!act || act->nr != RC_COMMAND)) - { -+ /* if the input was just a single byte we let it through */ -+ if (D_tcs[keyno + T_CAPS].str && strlen(D_tcs[keyno + T_CAPS].str) == 1) -+ return -1; - if (D_ESCseen) - { - D_ESCseen = 0; diff --git a/screen-4.0.4.tar.gz b/screen-4.0.4.tar.gz index 3b6d7ad..a97726b 100644 --- a/screen-4.0.4.tar.gz +++ b/screen-4.0.4.tar.gz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b18a0a2227c6e486d567a4bd952b27f0cd63ed91bd485bb7c1051e9bbd771129 -size 837276 +oid sha256:be724e27b918a1ba3172194b1082c2efb7bfa668a4f2e030d7cbdb168cee7d14 +size 846413 diff --git a/screen-poll-zombies.patch b/screen-poll-zombies.patch index 7a958ae..be47eb2 100644 --- a/screen-poll-zombies.patch +++ b/screen-poll-zombies.patch @@ -6,7 +6,7 @@ This is rather unfortunte if you for example have dozens of screens connected to foreign machines through network connections. Once the network connection is cut for a while, all windows will enter the dead/zombie state and one has to go through all windows -manually and hit the zombie resurrect key, once the network got +manually and hit the zombie resurrect key, once the network got set up again. This patch implements auto-reconnecting via zombie_timeout @@ -15,21 +15,8 @@ to current behavior (no polling is done). Signed-off-by: Thomas Renninger ---- - comm.c | 3 ++- - comm.h.dist | 3 ++- - doc/screen.1 | 9 +++++++++ - doc/screen.texinfo | 9 +++++++++ - process.c | 12 ++++++++++++ - screen.c | 7 +++++++ - window.c | 29 ++++++++++++++++++++++++++++- - window.h | 3 +++ - 8 files changed, 72 insertions(+), 3 deletions(-) - -Index: screen-4.0.4/comm.c -=================================================================== ---- screen-4.0.4.orig/comm.c -+++ screen-4.0.4/comm.c +--- ./comm.c.orig 2013-09-13 13:22:50.993279658 +0000 ++++ ./comm.c 2013-09-13 13:23:15.264279615 +0000 @@ -339,5 +339,6 @@ struct comm comms[RC_LAST + 1] = #ifdef ZMODEM { "zmodem", ARGS_012 }, @@ -38,11 +25,19 @@ Index: screen-4.0.4/comm.c + { "zombie", ARGS_012 }, + { "zombie_timeout", ARGS_1 } }; -Index: screen-4.0.4/doc/screen.1 -=================================================================== ---- screen-4.0.4.orig/doc/screen.1 -+++ screen-4.0.4/doc/screen.1 -@@ -3545,6 +3545,15 @@ Optionally you can put the word \*Qonerr +--- ./comm.h.dist.orig 2013-09-13 13:23:15.271279615 +0000 ++++ ./comm.h.dist 2013-09-13 13:23:44.198279564 +0000 +@@ -237,5 +237,6 @@ struct action + #define RC_XON 180 + #define RC_ZMODEM 181 + #define RC_ZOMBIE 182 ++#define RC_ZOMBIE_TIMEOUT 183 + +-#define RC_LAST 182 ++#define RC_LAST 183 +--- ./doc/screen.1.orig 2013-09-13 13:22:50.993279658 +0000 ++++ ./doc/screen.1 2013-09-13 13:23:15.266279615 +0000 +@@ -3547,6 +3547,15 @@ Optionally you can put the word \*Qonerr to monitor exit status of the process running in the window. If it exits normally ('0'), the window disappears. Any other exit value causes the window to become a zombie. @@ -58,11 +53,9 @@ Index: screen-4.0.4/doc/screen.1 .SH "THE MESSAGE LINE" .I Screen displays informational messages and other diagnostics in a \fImessage line\fP. -Index: screen-4.0.4/doc/screen.texinfo -=================================================================== ---- screen-4.0.4.orig/doc/screen.texinfo -+++ screen-4.0.4/doc/screen.texinfo -@@ -1238,6 +1238,8 @@ Send an XON character. @xref{XON/XOFF}. +--- ./doc/screen.texinfo.orig 2013-09-13 13:22:50.985279658 +0000 ++++ ./doc/screen.texinfo 2013-09-13 13:23:15.268279615 +0000 +@@ -1239,6 +1239,8 @@ Send an XON character. @xref{XON/XOFF}. Define how screen treats zmodem requests. @xref{Zmodem}. @item zombie [@var{keys} [onerror] ] Keep dead windows. @xref{Zombie}. @@ -71,7 +64,7 @@ Index: screen-4.0.4/doc/screen.texinfo @end table @node New Window, Selecting, Commands, Top -@@ -5222,6 +5224,8 @@ Display the version and modification dat +@@ -5223,6 +5225,8 @@ Display the version and modification dat @section Zombie @deffn Command zombie [@var{keys} [onerror] ] @deffnx Command defzombie [@var{keys}] @@ -80,7 +73,7 @@ Index: screen-4.0.4/doc/screen.texinfo (none)@* Per default windows are removed from the window list as soon as the windows process (e.g. shell) exits. When a string of two keys is -@@ -5241,6 +5245,11 @@ Optionally you can put the word @code{on +@@ -5242,6 +5246,11 @@ Optionally you can put the word @code{on cause screen to monitor exit status of the process running in the window. If it exits normally ('0'), the window disappears. Any other exit value causes the window to become a zombie. @@ -92,10 +85,8 @@ Index: screen-4.0.4/doc/screen.texinfo @end deffn @node Printcmd, Rendition, Zombie, Miscellaneous -Index: screen-4.0.4/process.c -=================================================================== ---- screen-4.0.4.orig/process.c -+++ screen-4.0.4/process.c +--- ./process.c.orig 2013-09-13 13:22:50.994279658 +0000 ++++ ./process.c 2013-09-13 13:23:15.270279615 +0000 @@ -3067,6 +3067,18 @@ int key; } WindowChanged((struct win *)0, 0); @@ -115,10 +106,8 @@ Index: screen-4.0.4/process.c case RC_SILENCE: n = fore->w_silence != 0; i = fore->w_silencewait; -Index: screen-4.0.4/screen.c -=================================================================== ---- screen-4.0.4.orig/screen.c -+++ screen-4.0.4/screen.c +--- ./screen.c.orig 2013-09-13 13:22:50.989279658 +0000 ++++ ./screen.c 2013-09-13 13:23:15.270279615 +0000 @@ -1557,6 +1557,13 @@ int wstat_valid; p->w_y = MFindUsedLine(p, p->w_bot, 1); sprintf(buf, "\n\r=== Command %s (%s) ===", reason, s ? s : "?"); @@ -133,10 +122,8 @@ Index: screen-4.0.4/screen.c WindowChanged(p, 'f'); } else -Index: screen-4.0.4/window.c -=================================================================== ---- screen-4.0.4.orig/window.c -+++ screen-4.0.4/window.c +--- ./window.c.orig 2013-09-13 13:22:50.990279658 +0000 ++++ ./window.c 2013-09-13 13:23:15.270279615 +0000 @@ -87,6 +87,7 @@ static int DoAutolf __P((char *, int *, static void ZombieProcess __P((char **, int *)); static void win_readev_fn __P((struct event *, char *)); @@ -163,7 +150,7 @@ Index: screen-4.0.4/window.c #undef COMPOSE } -@@ -838,6 +841,14 @@ struct NewWindow *newwin; +@@ -842,6 +845,14 @@ struct NewWindow *newwin; DoStartLog(p, buf, sizeof(buf)); } @@ -178,7 +165,7 @@ Index: screen-4.0.4/window.c p->w_readev.fd = p->w_writeev.fd = p->w_ptyfd; p->w_readev.type = EV_READ; p->w_writeev.type = EV_WRITE; -@@ -1060,6 +1071,7 @@ struct win *wp; +@@ -1064,6 +1075,7 @@ struct win *wp; evdeq(&wp->w_readev); /* just in case */ evdeq(&wp->w_writeev); /* just in case */ evdeq(&wp->w_silenceev); @@ -186,7 +173,7 @@ Index: screen-4.0.4/window.c evdeq(&wp->w_destroyev); #ifdef COPY_PASTE FreePaster(&wp->w_paster); -@@ -1941,6 +1953,21 @@ char *data; +@@ -1945,6 +1957,21 @@ char *data; return; } @@ -208,10 +195,8 @@ Index: screen-4.0.4/window.c static void win_writeev_fn(ev, data) -Index: screen-4.0.4/window.h -=================================================================== ---- screen-4.0.4.orig/window.h -+++ screen-4.0.4/window.h +--- ./window.h.orig 2013-09-13 13:22:50.990279658 +0000 ++++ ./window.h 2013-09-13 13:23:15.270279615 +0000 @@ -57,6 +57,7 @@ struct NewWindow int encoding; char *hstatus; @@ -229,15 +214,3 @@ Index: screen-4.0.4/window.h int w_ptyfd; /* fd of the master pty */ char w_inbuf[IOSIZE]; int w_inlen; -Index: screen-4.0.4/comm.h.dist -=================================================================== ---- screen-4.0.4.orig/comm.h.dist -+++ screen-4.0.4/comm.h.dist -@@ -236,5 +236,6 @@ struct action - #define RC_XON 179 - #define RC_ZMODEM 180 - #define RC_ZOMBIE 181 -+#define RC_ZOMBIE_TIMEOUT 182 - --#define RC_LAST 181 -+#define RC_LAST 182 diff --git a/screen.changes b/screen.changes index 571dbb3..2db8803 100644 --- a/screen.changes +++ b/screen.changes @@ -1,3 +1,17 @@ +------------------------------------------------------------------- +Fri Sep 13 15:17:12 CEST 2013 - mls@suse.de + +- update to current 4.0.4 git to get support for non-bmp unicode + * remove no longer needed mappedcmd.diff + * remove no longer needed styroptcrash.diff +- fix potential buffer overrun in show_all_active.patch +- redo combine screen_enhance_windows_list_1_3.patch, + screen_enhance_windows_list_2_3.patch, + screen_fix_wW_string_escapes_to_nearly_old_behavior.patch + into screen_enhance_windows_list.patch. + Do not mess with the old %w behaviour, just add support for the + windows command argument. Fixes bnc#808565. + ------------------------------------------------------------------- Sun Mar 24 10:57:09 UTC 2013 - trenn@suse.de diff --git a/screen.spec b/screen.spec index 7f1fb42..4976248 100644 --- a/screen.spec +++ b/screen.spec @@ -45,14 +45,10 @@ Patch3: screen-4.0.3-ipv6.patch Patch4: term_too_long.diff Patch5: sort_command.patch Patch6: libtinfo.diff -Patch7: mappedcmd.diff -Patch8: styroptcrash.diff Patch9: use_locale.diff Patch10: screen-poll-zombies.patch -Patch11: screen_enhance_windows_list_1_3.patch -Patch12: screen_enhance_windows_list_2_3.patch -Patch13: show_all_active.patch -Patch14: screen_fix_wW_string_escapes_to_nearly_old_behavior.patch +Patch11: show_all_active.patch +Patch12: screen_enhance_windows_list.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -71,14 +67,10 @@ Documentation: man page %patch4 -p1 %patch5 %patch6 -%patch7 -p2 -%patch8 -p2 %patch9 -p1 %patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 +%patch11 +%patch12 %build CFLAGS="-DMAXWIN=1000 $RPM_OPT_FLAGS" %configure --prefix=/usr --infodir=%{_infodir} \ diff --git a/screen_enhance_windows_list_2_3.patch b/screen_enhance_windows_list.patch similarity index 55% rename from screen_enhance_windows_list_2_3.patch rename to screen_enhance_windows_list.patch index 7805e1f..a4f06d9 100644 --- a/screen_enhance_windows_list_2_3.patch +++ b/screen_enhance_windows_list.patch @@ -1,9 +1,7 @@ -screen: Introduce windows command +screen: Introduce argument to windows command -This new command is doing nearly the same as the windows -command. -But a string escape can be passed which makes it much -more flexible. The default string escape if no argument +A string escape can be passed which makes the windows command +much more flexible. The default string escape if no argument is passed is "%n%f %t " which is intended to rebuild the same output the windows command would give as good as possible (slight changes with the flags can happen). @@ -17,17 +15,9 @@ window list status of an active screen session from shell). Signed-off-by: Thomas Renninger ---- - src/comm.c | 2 +- - src/doc/screen.1 | 5 ++++- - src/doc/screen.texinfo | 7 ++++++- - src/process.c | 35 ++++++++++++++++++++++++++++++++++- - 4 files changed, 45 insertions(+), 4 deletions(-) -diff --git a/comm.c b/comm.c -index 8722ca8..b8b535f 100644 ---- a/comm.c -+++ b/comm.c +--- ./comm.c.orig 2013-09-13 13:37:01.440278153 +0000 ++++ ./comm.c 2013-09-13 13:37:21.830278117 +0000 @@ -328,7 +328,7 @@ struct comm comms[RC_LAST + 1] = { "wall", NEED_DISPLAY|ARGS_1}, { "width", ARGS_0123 }, @@ -37,11 +27,9 @@ index 8722ca8..b8b535f 100644 { "wrap", NEED_FORE|ARGS_01 }, #ifdef COPY_PASTE { "writebuf", ARGS_0123 }, -diff --git a/doc/screen.1 b/doc/screen.1 -index 4e72f8b..7a0c1de 100644 ---- a/doc/screen.1 -+++ b/doc/screen.1 -@@ -3430,7 +3430,7 @@ settings). +--- ./doc/screen.1.orig 2013-09-13 13:39:15.327277916 +0000 ++++ ./doc/screen.1 2013-09-13 13:38:46.391277967 +0000 +@@ -3435,7 +3435,7 @@ settings). and 6 characters high in order to display. .sp .ne 3 @@ -50,7 +38,7 @@ index 4e72f8b..7a0c1de 100644 .PP Uses the message line to display a list of all the windows. Each window is listed by number with the name of process that has been -@@ -3446,6 +3446,9 @@ windows occupied by other users are marked with `&'; +@@ -3451,6 +3451,9 @@ windows occupied by other users are mark windows in the zombie state are marked with `Z'. If this list is too long to fit on the terminal's status line only the portion around the current window is displayed. @@ -60,11 +48,9 @@ index 4e72f8b..7a0c1de 100644 .sp .ne 3 .BR "wrap " [ on | off ] -diff --git a/doc/screen.texinfo b/doc/screen.texinfo -index e564abe..e7a693d 100644 ---- a/doc/screen.texinfo -+++ b/doc/screen.texinfo -@@ -2613,7 +2613,7 @@ before displaying a message. Default is 30 seconds. +--- ./doc/screen.texinfo.orig 2013-09-13 13:38:53.376277955 +0000 ++++ ./doc/screen.texinfo 2013-09-13 13:39:47.392277859 +0000 +@@ -2617,7 +2617,7 @@ before displaying a message. Default is @section Windows @kindex w @kindex C-w @@ -73,7 +59,7 @@ index e564abe..e7a693d 100644 (@kbd{C-a w}, @kbd{C-a C-w})@* Uses the message line to display a list of all the windows. Each window is listed by number with the name of the program running in the -@@ -2632,6 +2632,11 @@ windows in the zombie state are marked with @samp{Z}. +@@ -2636,6 +2636,11 @@ windows in the zombie state are marked w If this list is too long to fit on the terminal's status line only the portion around the current window is displayed. @@ -85,56 +71,51 @@ index e564abe..e7a693d 100644 @end deffn @node Hardstatus, Mousetrack, Windows, Window Settings -diff --git a/process.c b/process.c -index 7370924..79e82b5 100644 ---- a/process.c -+++ b/process.c -@@ -1838,7 +1838,12 @@ int key; +--- ./process.c.orig 2013-09-13 13:39:55.192277845 +0000 ++++ ./process.c 2013-09-13 13:53:18.672276423 +0000 +@@ -170,6 +170,7 @@ static void ResizeFin __P((char *, int, + static struct action *FindKtab __P((char *, int)); + static void SelectFin __P((char *, int, char *)); + static void SelectLayoutFin __P((char *, int, char *)); ++static void ShowWindowsX __P((char *)); + + + extern struct layer *flayer; +@@ -1838,6 +1839,11 @@ int key; Activate(-1); break; case RC_WINDOWS: -- ShowWindows(-1); -+ if (args[0]) { -+ s = SaveStr(args[0]); -+ ShowWindowsX(s); -+ } -+ else -+ ShowWindows(-1); ++ if (args[0]) ++ { ++ ShowWindowsX(args[0]); ++ break; ++ } + ShowWindows(-1); break; case RC_VERSION: - OutputMsg(0, "screen %s", version); -@@ -5605,6 +5610,34 @@ struct win *p; - return s; +@@ -5637,6 +5643,25 @@ int where; + Msg(0, "%s", ss); } +/* + * String Escape based windows listing -+ * Unfortunately it is not possible to rebuild the exact -+ * output (flags) from ShowWindows() with a default -+ * string escape. But when there should be a new screen -+ * version where slight output changes get accepted, -+ * ShowWindowsX() should replace the rather static -+ * (in output and size) old ShowWindows() and AddWindows() -+ * functions ++ * mls: currently does a Msg() call for each(!) window, dunno why + */ -+void -+ShowWindowsX(char *string) ++static void ++ShowWindowsX(str) ++char *str; +{ + int i; -+ char *s = ""; -+ + debug1("ShowWindowsX: string [%s]", string); -+ + for (i = 0; i < maxwin ; i++) + { -+ if (wtab[i] == NULL) ++ if (!wtab[i]) + continue; -+ -+ s = MakeWinMsg(string, wtab[i], '%'); -+ Msg(0, "%s", s); ++ Msg(0, "%s", MakeWinMsg(str, wtab[i], '%')); + } +} + - void - ShowWindows(where) - int where; ++ + static void + ShowInfo() + { diff --git a/screen_enhance_windows_list_1_3.patch b/screen_enhance_windows_list_1_3.patch deleted file mode 100644 index 4e97b31..0000000 --- a/screen_enhance_windows_list_1_3.patch +++ /dev/null @@ -1,60 +0,0 @@ -screen: Remove foreground and other window marking workaround - -and place it where it always should have been in the generic AddWindowsFlag -function. - -The actual implementation when this workaround was added is beyond git -history. This was needed to implement a very specific String Escape (wW) -function: - w all window numbers and names. With '-' quailifier: up to the - current window; with '+' qualifier: starting with the window - after the current one. - - W all window numbers and names except the current one - -But adding all windows to a String Escape does not make much sense and -may only fit for a very specific special case. -Better clean up the code, whoever needed wW String Escapes can use windows -command nowadays. - -Later the whole wW String Escape should vanish in favor for the -String Escaped windows command which can do the same but much more flexible. - -Signed-off-by: Thomas Renninger - -Index: screen-4.0.4/process.c -=================================================================== ---- - src/process.c | 6 ------ - 1 files changed, 0 insertions(+), 6 deletions(-) - -diff --git a/process.c b/process.c -index bbc46e6..7370924 100644 ---- a/process.c -+++ b/process.c -@@ -5507,12 +5507,8 @@ int where; - AddWinMsgRend(s, rend); - sprintf(s, "%d", p->w_number); - s += strlen(s); -- if (display && p == D_fore) -- *s++ = '*'; - if (!(flags & 2)) - { -- if (display && p == D_other) -- *s++ = '-'; - s = AddWindowFlags(s, len, p); - } - *s++ = ' '; -@@ -5537,12 +5533,10 @@ struct win *p; - *s = 0; - return s; - } --#if 0 - if (display && p == D_fore) - *s++ = '*'; - if (display && p == D_other) - *s++ = '-'; --#endif - if (p->w_layer.l_cvlist && p->w_layer.l_cvlist->c_lnext) - *s++ = '&'; - if (p->w_monitor == MON_DONE diff --git a/screen_fix_wW_string_escapes_to_nearly_old_behavior.patch b/screen_fix_wW_string_escapes_to_nearly_old_behavior.patch deleted file mode 100644 index 2370f77..0000000 --- a/screen_fix_wW_string_escapes_to_nearly_old_behavior.patch +++ /dev/null @@ -1,19 +0,0 @@ -From: Thomas Renninger -References: bnc#808565 -Subject: Fix old wW string escapes behavior to what previously was %Lw - -Signed-off-by: Thomas Renninger - -Index: screen-4.0.4/screen.c -=================================================================== ---- screen-4.0.4.orig/screen.c -+++ screen-4.0.4/screen.c -@@ -2780,7 +2780,7 @@ int rec; - oldfore = D_fore; - D_fore = win; - } -- ss = AddWindows(p, l - 1, (*s == 'w' ? 0 : 1) | (longflg ? 0 : 2) | (plusflg ? 4 : 0) | (minusflg ? 8 : 0), win ? win->w_number : -1); -+ ss = AddWindows(p, l - 1, (*s == 'w' ? 0 : 1) | (plusflg ? 4 : 0) | (minusflg ? 8 : 0), win ? win->w_number : -1); - if (display) - D_fore = oldfore; - } diff --git a/show_all_active.patch b/show_all_active.patch index 8de546e..a0901f1 100644 --- a/show_all_active.patch +++ b/show_all_active.patch @@ -5,11 +5,9 @@ each window is shown. Signed-off-by: Thomas Renninger -diff --git a/doc/screen.1 b/doc/screen.1 -index 7a0c1de..57352f1 100644 ---- a/doc/screen.1 -+++ b/doc/screen.1 -@@ -3750,6 +3750,10 @@ window; with '+' qualifier: starting with the window after the current +--- ./doc/screen.1.orig 2013-09-13 13:26:28.055279274 +0000 ++++ ./doc/screen.1 2013-09-13 13:26:41.385279250 +0000 +@@ -3747,6 +3747,10 @@ window; with '+' qualifier: starting wit one. .IP W all window numbers and names except the current one @@ -20,29 +18,24 @@ index 7a0c1de..57352f1 100644 .IP y last two digits of the year number .IP Y -diff --git a/screen.c b/screen.c -index efb73d3..e8a553c 100644 ---- a/screen.c -+++ b/screen.c -@@ -2681,6 +2681,23 @@ int rec; +--- ./screen.c.orig 2013-09-13 13:26:28.057279274 +0000 ++++ ./screen.c 2013-09-13 13:34:30.151278421 +0000 +@@ -2693,6 +2693,20 @@ int rec; } p += strlen(p) - 1; break; + case 'X': case 'x': -+ if (!win) -+ break; -+ if (win->w_cmdargs[0]) { -+ sprintf(p, "%s", win->w_cmdargs[0]); -+ p += strlen(p); -+ } -+ else -+ break; -+ if (*s == 'x') { -+ for (i = 1; win->w_cmdargs[i]; i++) { -+ sprintf(p, " %s", win->w_cmdargs[i]); ++ *p = 0; ++ for (i = 0; win && win->w_cmdargs[i]; i++) ++ { ++ if (l < strlen(win->w_cmdargs[i]) + 1) ++ break; ++ sprintf(p, i ? "%s" : " %s", win->w_cmdargs[i]); ++ l -= strlen(p); + p += strlen(p); ++ if (i == 0 && *s == 'X') ++ break; + } -+ } + p--; + break; case 'l': diff --git a/styroptcrash.diff b/styroptcrash.diff deleted file mode 100644 index 6d42612..0000000 --- a/styroptcrash.diff +++ /dev/null @@ -1,19 +0,0 @@ -commit c64f800e7b197e14433ac97be12f32385a27a04f -Author: Michael Schroeder -Date: Wed Aug 8 19:54:11 2012 +0200 - - extend commit #8c1b8e45, which fixed -x but forgot about -r - -diff --git a/src/screen.c b/src/screen.c -index 949df01..6e19732 100644 ---- a/src/screen.c -+++ b/src/screen.c -@@ -988,7 +988,7 @@ char **av; - Panic(0, "$HOME too long - sorry."); - - attach_tty = ""; -- if (!detached && !lsflag && !cmdflag && !(dflag && !mflag && !rflag && !xflag) && !(!mflag && !SockMatch && sty && !xflag)) -+ if (!detached && !lsflag && !cmdflag && !(dflag && !mflag && !rflag && !xflag) && !(sty && !SockMatch && !mflag && !rflag && !xflag)) - { - #ifndef NAMEDPIPE - int fl;