Annotation of 43BSD/ingres/source/ctlmod/cm_cleanup.c, revision 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.