[w3m-dev 03683] interrupt in getNextPage()

* file.c (getNextPage): trap SIGINT
From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
This commit is contained in:
Fumitoshi UKAI
2003-01-24 17:36:44 +00:00
parent ec84de753b
commit 9cfb271a67
2 changed files with 26 additions and 9 deletions
+6 -1
View File
@@ -1,3 +1,8 @@
2003-01-25 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
* [w3m-dev 03683] interrupt in getNextPage()
* file.c (getNextPage): trap SIGINT
2003-01-25 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> 2003-01-25 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
* [w3m-dev 03682] open null file on tab * [w3m-dev 03682] open null file on tab
@@ -6837,4 +6842,4 @@ a * [w3m-dev 03276] compile error on EWS4800
* release-0-2-1 * release-0-2-1
* import w3m-0.2.1 * import w3m-0.2.1
$Id: ChangeLog,v 1.713 2003/01/24 17:34:36 ukai Exp $ $Id: ChangeLog,v 1.714 2003/01/24 17:36:44 ukai Exp $
+20 -8
View File
@@ -1,4 +1,4 @@
/* $Id: file.c,v 1.204 2003/01/23 18:38:06 ukai Exp $ */ /* $Id: file.c,v 1.205 2003/01/24 17:36:45 ukai Exp $ */
#include "fm.h" #include "fm.h"
#include <sys/types.h> #include <sys/types.h>
#include "myctype.h" #include "myctype.h"
@@ -7192,24 +7192,25 @@ openGeneralPagerBuffer(InputStream stream)
Line * Line *
getNextPage(Buffer *buf, int plen) getNextPage(Buffer *buf, int plen)
{ {
Line *top = buf->topLine, *last = buf->lastLine, *cur = buf->currentLine; Line *volatile top = buf->topLine, *volatile last = buf->lastLine,
int i, nlines = 0; *volatile cur = buf->currentLine;
int i;
int volatile nlines = 0;
clen_t linelen = 0, trbyte = buf->trbyte; clen_t linelen = 0, trbyte = buf->trbyte;
Str lineBuf2; Str lineBuf2;
char pre_lbuf = '\0'; char volatile pre_lbuf = '\0';
URLFile uf; URLFile uf;
char code; char volatile code;
int squeeze_flag = FALSE; int volatile squeeze_flag = FALSE;
Lineprop *propBuffer = NULL; Lineprop *propBuffer = NULL;
#ifdef USE_ANSI_COLOR #ifdef USE_ANSI_COLOR
Linecolor *colorBuffer = NULL; Linecolor *colorBuffer = NULL;
#endif #endif
MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
if (buf->pagerSource == NULL) if (buf->pagerSource == NULL)
return NULL; return NULL;
if (fmInitialized)
crmode();
if (last != NULL) { if (last != NULL) {
nlines = last->real_linenumber; nlines = last->real_linenumber;
pre_lbuf = *(last->lineBuf); pre_lbuf = *(last->lineBuf);
@@ -7224,6 +7225,14 @@ getNextPage(Buffer *buf, int plen)
else else
code = DocumentCode; code = DocumentCode;
#endif #endif
if (SETJMP(AbortLoading) != 0) {
goto pager_end;
}
prevtrap = signal(SIGINT, KeyAbort);
if (fmInitialized)
term_cbreak();
init_stream(&uf, SCM_UNKNOWN, NULL); init_stream(&uf, SCM_UNKNOWN, NULL);
for (i = 0; i < plen; i++) { for (i = 0; i < plen; i++) {
lineBuf2 = StrmyISgets(buf->pagerSource); lineBuf2 = StrmyISgets(buf->pagerSource);
@@ -7284,8 +7293,11 @@ getNextPage(Buffer *buf, int plen)
buf->firstLine->prev = NULL; buf->firstLine->prev = NULL;
} }
} }
pager_end:
if (fmInitialized) if (fmInitialized)
term_raw(); term_raw();
signal(SIGINT, prevtrap);
buf->trbyte = trbyte + linelen; buf->trbyte = trbyte + linelen;
#ifdef JP_CHARSET #ifdef JP_CHARSET
buf->document_code = code; buf->document_code = code;