[gst123] Don't crash with terminals that don't define all escape sequences. Closes bz #666059.

Siddhesh Poyarekar siddhesh at fedoraproject.org
Mon Jan 3 14:20:13 UTC 2011


commit 2584589aa175109b9ef02734e845a7edcc4d93a3
Author: Siddhesh Poyarekar <siddhesh.poyarekar at gmail.com>
Date:   Mon Jan 3 19:51:23 2011 +0530

    Don't crash with terminals that don't define all escape sequences.
    Closes bz #666059.

 gst123-sanitize-tgetstr.patch |   84 +++++++++++++++++++++++++++++++++++++++++
 gst123.spec                   |    8 +++-
 2 files changed, 91 insertions(+), 1 deletions(-)
---
diff --git a/gst123-sanitize-tgetstr.patch b/gst123-sanitize-tgetstr.patch
new file mode 100644
index 0000000..07b9871
--- /dev/null
+++ b/gst123-sanitize-tgetstr.patch
@@ -0,0 +1,84 @@
+diff --git a/src/terminal.cc b/src/terminal.cc
+index 1d814d4..92cc49b 100644
+--- a/src/terminal.cc
++++ b/src/terminal.cc
+@@ -88,6 +88,15 @@ Terminal::signal_sig_cont (int)
+ }
+ 
+ void
++Terminal::print_term (const char *key)
++{
++  char *ret = tgetstr (const_cast<char *> (key), &term_p);
++
++  if (ret)
++    printf ("%s", ret);
++}
++
++void
+ Terminal::init_terminal()
+ {
+   // configure input params of the terminal
+@@ -100,11 +109,19 @@ Terminal::init_terminal()
+   tcsetattr (0, TCSANOW, &tio_new);
+ 
+   // enable keypad_xmit
+-  printf ("%s", tgetstr ("ks", &term_p));
++  print_term ("ks");
+   fflush (stdout);
+ }
+ 
+ void
++Terminal::bind_key (const char *key, int handler)
++{
++  char *ret = tgetstr (const_cast<char *> (key), &term_p);
++  if (ret)
++    keys[ret] = handler;
++}
++
++void
+ Terminal::init (GMainLoop *loop, KeyHandler *key_handler)
+ {
+   terminal_instance = this;
+@@ -123,12 +140,12 @@ Terminal::init (GMainLoop *loop, KeyHandler *key_handler)
+   init_terminal();
+ 
+   // initialize common keyboard escape sequences
+-  keys[tgetstr ("ku", &term_p)] = KEY_HANDLER_UP;
+-  keys[tgetstr ("kd", &term_p)] = KEY_HANDLER_DOWN;
+-  keys[tgetstr ("kl", &term_p)] = KEY_HANDLER_LEFT;
+-  keys[tgetstr ("kr", &term_p)] = KEY_HANDLER_RIGHT;
+-  keys[tgetstr ("kP", &term_p)] = KEY_HANDLER_PAGE_UP;
+-  keys[tgetstr ("kN", &term_p)] = KEY_HANDLER_PAGE_DOWN;
++  bind_key ("ku", KEY_HANDLER_UP);
++  bind_key ("kd", KEY_HANDLER_DOWN);
++  bind_key ("kl", KEY_HANDLER_LEFT);
++  bind_key ("kr", KEY_HANDLER_RIGHT);
++  bind_key ("kP", KEY_HANDLER_PAGE_UP);
++  bind_key ("kN", KEY_HANDLER_PAGE_DOWN);
+ 
+   // add mainloop source for keys
+   static GSourceFuncs source_funcs = { stdin_prepare, stdin_check, stdin_dispatch, };
+@@ -143,9 +160,8 @@ void
+ Terminal::end()
+ {
+   tcsetattr(0,TCSANOW,&tio_orig);
+-
+   // disable keypad xmit
+-  printf ("%s", tgetstr ("ke", &term_p));
++  print_term("ke");
+ }
+ 
+ void
+diff --git a/src/terminal.h b/src/terminal.h
+index 012d982..81898e2 100644
+--- a/src/terminal.h
++++ b/src/terminal.h
+@@ -41,6 +41,8 @@ class Terminal
+   void read_stdin();
+   int getch();
+   void init_terminal();
++  void bind_key (const char *key, int handler);
++  void print_term (const char *key);
+ 
+ public:
+   void init (GMainLoop *loop, KeyHandler *key_handler);
diff --git a/gst123.spec b/gst123.spec
index 677c477..c1afbce 100644
--- a/gst123.spec
+++ b/gst123.spec
@@ -1,9 +1,10 @@
 Summary: Command line multimedia player based on gstreamer
 Name: gst123
 Version: 0.1.3
-Release: 1%{?dist}
+Release: 2%{?dist}
 URL: http://space.twc.de/~stefan/gst123.php
 Source: http://space.twc.de/~stefan/gst123/%{name}-%{version}.tar.bz2
+Patch1: gst123-sanitize-tgetstr.patch
 
 License: LGPLv2
 Group: Applications/Multimedia
@@ -25,6 +26,7 @@ music files.
 
 %prep
 %setup -q
+%patch1 -p1
 
 %build
 %configure
@@ -45,6 +47,10 @@ rm -rf %{buildroot}
 %doc COPYING AUTHORS README NEWS
 
 %changelog
+* Mon Jan  3 2011 Siddhesh Poyarekar <siddhesh at redhat.com> - 0.1.3-2
+- Don't crash with terminals that don't define all escape sequences.
+  Closes bz #666059.
+
 * Wed Dec 08 2010 Siddhesh Poyarekar <spoyarek at redhat.com> - 0.1.3-1
 - rebase to upstream 0.1.3. Closes bz #611636
 


More information about the scm-commits mailing list