Annotation of 43BSD/ingres/source/ctlmod/cm_cleanup.c, revision 1.1.1.1

1.1       root        1: # include      "ctlmod.h"
                      2: # include      <signal.h>
                      3: # include      <sccs.h>
                      4: 
                      5: SCCSID(@(#)cm_cleanup.c        8.1     12/31/84)
                      6: 
                      7: /*
                      8: **  CM_CLEANUP -- cleanup after interrupt or error.
                      9: **
                     10: **     This routine does things like call the interrupt cleanup
                     11: **     function, reset the input, etc.
                     12: **
                     13: **     Parameters:
                     14: **             typ -- the type of cleanup:
                     15: **                     1 -- fatal error (from error [error.c]).
                     16: **                     2 -- keyboard interrupt.
                     17: **
                     18: **     Returns:
                     19: **             never (uses non-local jump to ctlmod/main.c).
                     20: **
                     21: **     Side Effects:
                     22: **             Proc_name & Cm.cm_input are reset.
                     23: **
                     24: **     Trace Flags:
                     25: **             0
                     26: */
                     27: 
                     28: cm_cleanup(typ)
                     29: int    typ;
                     30: {
                     31:        register int            i;
                     32:        register struct fn_def  *f;
                     33:        extern char             *Proc_name;
                     34:        extern jmp_buf          CmReset;
                     35:        extern                  rubcatch();
                     36:        register ctx_t          *ctx;
                     37: 
                     38: # ifdef xCTR2
                     39:        if (tTf(0, 13))
                     40:                printf("cm_cleanup: %d\n", typ);
                     41: # endif
                     42: 
                     43:        /*
                     44:        **  Call all interrupt cleanup functions for active
                     45:        **      modules.
                     46:        */
                     47: 
                     48:        for (i = 0; i < NumFunc; i++)
                     49:        {
                     50:                f = FuncVect[i];
                     51:                if (f->fn_active > 0)
                     52:                {
                     53:                        Ctx.ctx_name = Proc_name = f->fn_name;
                     54:                        (*f->fn_cleanup)(typ);
                     55:                }
                     56:        }
                     57: 
                     58:        /* clean up memory */
                     59:        for (ctx = &Ctx; ctx != NULL; ctx = ctx->ctx_link)
                     60:        {
                     61:                if (ctx->ctx_qt != NULL)
                     62:                        free(ctx->ctx_qt);
                     63:                if (ctx->ctx_glob != NULL)
                     64:                {
                     65:                        bmove(ctx->ctx_glob, ctx->ctx_fn->fn_gptr, ctx->ctx_fn->fn_gsize);
                     66:                        free(ctx->ctx_glob);
                     67:                }
                     68:        }
                     69: 
                     70:        /* return to top of loop */
                     71:        longjmp(CmReset, typ);
                     72: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.