X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhl.c;h=386cf95cd9fed4b36d0132e1fbfe981b678bdcc2;hp=540367356acc7c5d0d80268d0e28e76f4f43441a;hb=2abb9a7cfb0930e27062088734d306e7d78e4cc2;hpb=5a12e4b0477d3ad699f5713682d26079f2792d17 diff --git a/uip/mhl.c b/uip/mhl.c index 5403673..386cf95 100644 --- a/uip/mhl.c +++ b/uip/mhl.c @@ -12,8 +12,10 @@ #include #include #include -#include #include +#include +#include +#include /* ** MAJOR BUG: @@ -174,7 +176,7 @@ static char *parptr; static int num_ignores = 0; static char *ignores[MAXARGS]; -static jmp_buf env; +volatile sig_atomic_t eflag = 0; /* ** Redefine a couple of functions. @@ -565,21 +567,19 @@ process(char *fname, int ofilen, int ofilec) FILE *fp = NULL; struct mcomp *c1; - if (setjmp(env) == 0) { - if (fname) { - fp = fopen(fname, "r"); - if (fp == NULL) { - advise(fname, "unable to open"); - exitstat++; - return; - } - } else { - fname = "(stdin)"; - fp = stdin; + if (fname) { + fp = fopen(fname, "r"); + if (fp == NULL) { + advise(fname, "unable to open"); + exitstat++; + return; } - SIGNAL(SIGINT, intrser); - mhlfile(fp, fname, ofilen, ofilec); + } else { + fname = "(stdin)"; + fp = stdin; } + SIGNAL(SIGINT, intrser); + mhlfile(fp, fname, ofilen, ofilec); SIGNAL(SIGINT, SIG_IGN); if (fp != stdin) @@ -615,7 +615,7 @@ mhlfile(FILE *fp, char *mname, int ofilen, int ofilec) printf(">>> %s\n\n", mname); } - for (state = FLD;;) { + for (state = FLD;!eflag;) { switch (state = m_getfld(state, name, buf, sizeof(buf), fp)) { case FLD: case FLDPLUS: @@ -1104,7 +1104,5 @@ putch(char ch) static void intrser(int i) { - discard(stdout); - putchar('\n'); - longjmp(env, DONE); + eflag = 1; }