[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