VMS Help  —  CRTL  VAXC$ESTABLISH
    Used for establishing an OpenVMS exception handler for a
    particular routine. This function establishes a special C RTL
    exception handler in the routine that called it. This special
    handler catches all RTL-related exceptions that occur in later
    routines, and passes on all other exceptions to your handler.

    Format

      #include  <signal.h>

      void VAXC$ESTABLISH  (unsigned int (*exception_handler)(void
                           *sigarr, void *mecharr));

1  –  Arguments

 exception_handler

    The name of the function that you want to establish as an OpenVMS
    exception handler. You pass a pointer to this function as the
    parameter to VAXC$ESTABLISH.

 sigarr

    A pointer to the signal array.

 mecharr

    A pointer to the mechanism array.

2  –  Description

    VAXC$ESTABLISH must be used in place of LIB$ESTABLISH when
    programs use the C RTL routines setjmp or longjmp. See
    setjmp and longjmp, or sigsetjmp and siglongjmp.

    You can only invoke the VAXC$ESTABLISH function from an VSI C
    for OpenVMS function, because it relies on the allocation of data
    space on the run-time stack by the VSI C compiler. Calling
    the OpenVMS system library routine LIB$ESTABLISH directly from an
    VSI C function results in undefined behavior from the setjmp
    and longjmp functions.

    To cause an OpenVMS exception to generate a UNIX style signal,
    user exception handlers must return SS$_RESIGNAL upon receiving
    any exception that they do not want to handle. Returning SS$_
    NORMAL prevents the generation of a UNIX style signal. UNIX
    signals are generated as if by an exception handler in the
    stack frame of the main C program. Not all OpenVMS exceptions
    correspond to UNIX signals. See the "Error and Signal Handling"
    chapter of the VSI C RTL Reference Manual. for more information on
    the interaction of OpenVMS exceptions and UNIX style signals.

    Calling VAXC$ESTABLISH with an argument of NULL cancels an
    existing handler in that routine.

                                  NOTES

       On OpenVMS Alpha systems, VAXC$ESTABLISH is implemented as a
       compiler built-in function, not as an C RTL function.
       (Alpha only)
Close Help