148 lines
4.2 KiB
148 lines
4.2 KiB
# --- 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 |
|
|
|
|