Christian Wiese
14 years ago
1 changed files with 148 additions and 0 deletions
@ -0,0 +1,148 @@
|
||||
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
||||
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
||||
#
|
||||
# Filename: package/.../newt/newt-0.52.12-nostdin.patch
|
||||
# Copyright (C) 2011 The OpenSDE Project
|
||||
#
|
||||
# More information can be found in the files COPYING and README.
|
||||
#
|
||||
# This patch file is dual-licensed. It is available under the license the
|
||||
# patched project is licensed under, as long as it is an OpenSource license
|
||||
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
||||
# of the GNU General Public License as published by the Free Software
|
||||
# Foundation; either version 2 of the License, or (at your option) any later
|
||||
# version.
|
||||
# --- SDE-COPYRIGHT-NOTE-END ---
|
||||
|
||||
From f16b3d1ac2edaceb64463f29a3e394a0102aa554 Mon Sep 17 00:00:00 2001
|
||||
From: Miroslav Lichvar <mlichvar@redhat.com>
|
||||
Date: Wed, 10 Nov 2010 17:57:11 +0100
|
||||
Subject: [PATCH 1/2] don't call exit in library
|
||||
|
||||
The feof() detection of closed stdin doesn't work anyway.
|
||||
---
|
||||
newt.c | 3 ---
|
||||
1 files changed, 0 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/newt.c b/newt.c
|
||||
index f3f49ff..4e37bc1 100644
|
||||
--- a/newt.c
|
||||
+++ b/newt.c
|
||||
@@ -565,10 +565,7 @@ int newtGetKey(void) {
|
||||
if (key == SLANG_GETKEY_ERROR) {
|
||||
/* Either garbage was read, or stdin disappeared
|
||||
* (the parent terminal was proably closed)
|
||||
- * if the latter, die.
|
||||
*/
|
||||
- if (feof(stdin))
|
||||
- exit(1);
|
||||
if (needResize) {
|
||||
needResize = 0;
|
||||
return NEWT_KEY_RESIZE;
|
||||
--
|
||||
1.7.3.2
|
||||
|
||||
From b8b8a86f22d08216328dffb8d70b3ae67629a905 Mon Sep 17 00:00:00 2001
|
||||
From: Miroslav Lichvar <mlichvar@redhat.com>
|
||||
Date: Wed, 10 Nov 2010 18:10:46 +0100
|
||||
Subject: [PATCH 2/2] return NEWT_EXIT_ERROR from form when stdin disappears
|
||||
|
||||
---
|
||||
form.c | 9 ++++++++-
|
||||
newt.c | 15 ++++++++-------
|
||||
newt.h | 3 ++-
|
||||
3 files changed, 18 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/form.c b/form.c
|
||||
index 24542a0..5b421fb 100644
|
||||
--- a/form.c
|
||||
+++ b/form.c
|
||||
@@ -841,7 +841,8 @@ newtComponent newtRunForm(newtComponent co) {
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
- }
|
||||
+ } else if (es.reason == NEWT_EXIT_ERROR)
|
||||
+ return NULL;
|
||||
|
||||
return es.u.co;
|
||||
}
|
||||
@@ -1072,6 +1073,12 @@ void newtFormRun(newtComponent co, struct newtExitStruct * es) {
|
||||
}
|
||||
}
|
||||
|
||||
+ if (key == NEWT_KEY_ERROR) {
|
||||
+ es->u.watch = -1;
|
||||
+ es->reason = NEWT_EXIT_ERROR;
|
||||
+ done = 1;
|
||||
+ }
|
||||
+
|
||||
if (!done) {
|
||||
ev.event = EV_KEYPRESS;
|
||||
ev.u.key = key;
|
||||
diff --git a/newt.c b/newt.c
|
||||
index 4e37bc1..ab41dd8 100644
|
||||
--- a/newt.c
|
||||
+++ b/newt.c
|
||||
@@ -555,29 +555,30 @@ static void kmap_trie_fallback(struct kmap_trie_entry *to,
|
||||
}
|
||||
|
||||
int newtGetKey(void) {
|
||||
- int key;
|
||||
+ int key, lastcode, errors = 0;
|
||||
unsigned char *chptr = keyreader_buf, *lastmatch;
|
||||
- int lastcode;
|
||||
struct kmap_trie_entry *curr = kmap_trie_root;
|
||||
|
||||
do {
|
||||
key = getkey();
|
||||
if (key == SLANG_GETKEY_ERROR) {
|
||||
- /* Either garbage was read, or stdin disappeared
|
||||
- * (the parent terminal was proably closed)
|
||||
- */
|
||||
if (needResize) {
|
||||
needResize = 0;
|
||||
return NEWT_KEY_RESIZE;
|
||||
}
|
||||
|
||||
- /* ignore other signals */
|
||||
+ /* Ignore other signals, but assume that stdin disappeared (the
|
||||
+ * parent terminal was proably closed) if the error persists.
|
||||
+ */
|
||||
+ if (errors++ > 10)
|
||||
+ return NEWT_KEY_ERROR;
|
||||
+
|
||||
continue;
|
||||
}
|
||||
|
||||
if (key == NEWT_KEY_SUSPEND && suspendCallback)
|
||||
suspendCallback(suspendCallbackData);
|
||||
- } while (key == NEWT_KEY_SUSPEND);
|
||||
+ } while (key == NEWT_KEY_SUSPEND || key == SLANG_GETKEY_ERROR);
|
||||
|
||||
/* Read more characters, matching against the trie as we go */
|
||||
lastcode = *chptr = key;
|
||||
diff --git a/newt.h b/newt.h
|
||||
index 3111a21..f71ce1e 100644
|
||||
--- a/newt.h
|
||||
+++ b/newt.h
|
||||
@@ -217,7 +217,7 @@ char * newtReflowText(char * text, int width, int flexDown, int flexUp,
|
||||
|
||||
struct newtExitStruct {
|
||||
enum { NEWT_EXIT_HOTKEY, NEWT_EXIT_COMPONENT, NEWT_EXIT_FDREADY,
|
||||
- NEWT_EXIT_TIMER } reason;
|
||||
+ NEWT_EXIT_TIMER, NEWT_EXIT_ERROR } reason;
|
||||
union {
|
||||
int watch;
|
||||
int key;
|
||||
@@ -307,6 +307,7 @@ void newtComponentDestroy(newtComponent co);
|
||||
|
||||
/* not really a key, but newtGetKey returns it */
|
||||
#define NEWT_KEY_RESIZE NEWT_KEY_EXTRA_BASE + 113
|
||||
+#define NEWT_KEY_ERROR NEWT_KEY_EXTRA_BASE + 114
|
||||
|
||||
#define NEWT_ANCHOR_LEFT (1 << 0)
|
||||
#define NEWT_ANCHOR_RIGHT (1 << 1)
|
||||
--
|
||||
1.7.3.2
|
||||
|
Loading…
Reference in new issue