亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? winxfltr.c

?? C標準庫源代碼,能提高對C的理解,不錯的哦
?? C
字號:
/***
*winxfltr.c - startup exception filter
*
*       Copyright (c) 1990-1997, Microsoft Corporation. All rights reserved
*
*Purpose:
*       Defines _XcptFilter(), the function called by the exception filter
*       expression in the startup code.
*
*******************************************************************************/


#include <cruntime.h>
#include <float.h>
#include <mtdll.h>
#include <oscalls.h>
#include <signal.h>
#include <stddef.h>


/*
 * special code denoting no signal.
 */
#define NOSIG   -1


struct _XCPT_ACTION _XcptActTab[] = {

/*
 * Exceptions corresponding to the same signal (e.g., SIGFPE) must be grouped
 * together.
 *
 *        XcptNum                                        SigNum    XcptAction
 *        -------------------------------------------------------------------
 */
        { (unsigned long)STATUS_ACCESS_VIOLATION,         SIGSEGV, SIG_DFL },

        { (unsigned long)STATUS_ILLEGAL_INSTRUCTION,      SIGILL,  SIG_DFL },

        { (unsigned long)STATUS_PRIVILEGED_INSTRUCTION,   SIGILL,  SIG_DFL },

/*      { (unsigned long)STATUS_NONCONTINUABLE_EXCEPTION, NOSIG,   SIG_DIE },
 */
/*      { (unsigned long)STATUS_INVALID_DISPOSITION,      NOSIG,   SIG_DIE },
 */
        { (unsigned long)STATUS_FLOAT_DENORMAL_OPERAND,   SIGFPE,  SIG_DFL },

        { (unsigned long)STATUS_FLOAT_DIVIDE_BY_ZERO,     SIGFPE,  SIG_DFL },

        { (unsigned long)STATUS_FLOAT_INEXACT_RESULT,     SIGFPE,  SIG_DFL },

        { (unsigned long)STATUS_FLOAT_INVALID_OPERATION,  SIGFPE,  SIG_DFL },

        { (unsigned long)STATUS_FLOAT_OVERFLOW,           SIGFPE,  SIG_DFL },

        { (unsigned long)STATUS_FLOAT_STACK_CHECK,        SIGFPE,  SIG_DFL },

        { (unsigned long)STATUS_FLOAT_UNDERFLOW,          SIGFPE,  SIG_DFL },

/*      { (unsigned long)STATUS_INTEGER_DIVIDE_BY_ZERO,   NOSIG,   SIG_DIE },
 */
/*      { (unsigned long)STATUS_STACK_OVERFLOW,           NOSIG,   SIG_DIE }
 */
};

/*
 * WARNING!!!! The definition below amounts to defining that:
 *
 *                  XcptActTab[ _First_FPE_Indx ]
 *
 * is the very FIRST entry in the table corresponding to a floating point
 * exception. Whenever the definition of the XcptActTab[] table is changed,
 * this #define must be review to ensure correctness.
 */
int _First_FPE_Indx = 3;

/*
 * There are _Num_FPE (currently, 7) entries in XcptActTab corresponding to
 * floating point exceptions.
 */
int _Num_FPE = 7;

#ifdef _MT

/*
 * size of the exception-action table (in bytes)
 */
int _XcptActTabSize = sizeof _XcptActTab;

#endif  /* _MT */

/*
 * number of entries in the exception-action table
 */
int _XcptActTabCount = (sizeof _XcptActTab)/sizeof(_XcptActTab[0]);


#ifdef _MT

/*
 * the FPECODE and PXCPTINFOPTRS macros are intended to simplify some of
 * single vs multi-thread code in the filter function. basically, each macro
 * is conditionally defined to be a global variable or the corresponding
 * field in the per-thread data structure. NOTE THE ASSUMPTION THAT THE
 * _ptiddata VARIABLE IS ALWAYS NAMED ptd!!!!
 */

#define FPECODE         ptd->_tfpecode

#define PXCPTINFOPTRS   ptd->_tpxcptinfoptrs

#else  /* _MT */

/*
 * global variable containing the floating point exception code
 */
int _fpecode = _FPE_EXPLICITGEN;

#define FPECODE         _fpecode

/*
 * global variable holding _PEXCEPTION_INFO_PTRS value
 */
void * _pxcptinfoptrs = NULL;

#define PXCPTINFOPTRS   _pxcptinfoptrs

#endif  /* _MT */

/*
 * function to look up the exception action table (_XcptActTab[]) corresponding
 * to the given exception
 */

#ifdef _MT

static struct _XCPT_ACTION * __cdecl xcptlookup(
        unsigned long,
        struct _XCPT_ACTION *
        );

#else  /* _MT */

static struct _XCPT_ACTION * __cdecl xcptlookup(
        unsigned long
        );

#endif  /* _MT */


/***
*int _XcptFilter(xcptnum, pxcptptrs) - Identify exception and the action to
*       be taken with it
*
*Purpose:
*       _XcptFilter() is called by the exception filter expression of the
*       _try - _except statement, in the startup code, which guards the call
*       to the user's main(). _XcptFilter() consults the _XcptActTab[] table
*       to identify the exception and determine its disposition. The
*       is disposition of an exception corresponding to a C signal may be
*       modified by a call to signal(). There are three broad cases:
*
*       (1) Unrecognized exceptions and exceptions for which the XcptAction
*           value is SIG_DFL.
*
*           In both of these cases, UnhandledExceptionFilter() is called and
*           its return value is returned.
*
*       (2) Exceptions corresponding to C signals with an XcptAction value
*           NOT equal to SIG_DFL.
*
*           These are the C signals whose disposition has been affected by a
*           call to signal() or whose default semantics differ slightly from
*           from the corresponding OS exception. In all cases, the appropriate
*           disposition of the C signal is made by the function (e.g., calling
*           a user-specified signal handler). Then, EXCEPTION_CONTINUE_EXECU-
*           TION is returned to cause the OS exception dispatcher to dismiss
*           the exception and resume execution at the point where the
*           exception occurred.
*
*       (3) Exceptions for which the XcptAction value is SIG_DIE.
*
*           These are the exceptions corresponding to fatal C runtime errors.
*           _XCPT_HANDLE is returned to cause control to pass into the
*           _except-block of the _try - _except statement. There, the runtime
*           error is identified, an appropriate error message is printed out
*           and the program is terminated.
*
*Entry:
*
*Exit:
*
*Exceptions:
*       That's what it's all about!
*
*******************************************************************************/

int __cdecl _XcptFilter (
        unsigned long xcptnum,
        PEXCEPTION_POINTERS pxcptinfoptrs
        )
{
        struct _XCPT_ACTION * pxcptact;
        _PHNDLR phandler;
        void *oldpxcptinfoptrs;
        int oldfpecode;
        int indx;

#ifdef _MT
        _ptiddata ptd = _getptd();
#endif  /* _MT */

        /*
         * first, take care of all unrecognized exceptions and exceptions with
         * XcptAction values of SIG_DFL.
         */
#ifdef _MT
        if ( ((pxcptact = xcptlookup(xcptnum, ptd->_pxcptacttab)) == NULL)
            || (pxcptact->XcptAction == SIG_DFL) )
#else  /* _MT */
        if ( ((pxcptact = xcptlookup(xcptnum)) == NULL) ||
            (pxcptact->XcptAction == SIG_DFL) )
#endif  /* _MT */

                /*
                 * pass the buck to the UnhandledExceptionFilter
                 */
                return( UnhandledExceptionFilter(pxcptinfoptrs) );


        /*
         * next, weed out all of the exceptions that need to be handled by
         * dying, perhaps with a runtime error message
         */
        if ( pxcptact->XcptAction == SIG_DIE ) {
                /*
                 * reset XcptAction (in case of recursion) and drop into the
                 * except-clause.
                 */
                pxcptact->XcptAction = SIG_DFL;
                return(EXCEPTION_EXECUTE_HANDLER);
        }

        /*
         * next, weed out all of the exceptions that are simply ignored
         */
        if ( pxcptact->XcptAction == SIG_IGN )
                /*
                 * resume execution
                 */
                return(EXCEPTION_CONTINUE_EXECUTION);

        /*
         * the remaining exceptions all correspond to C signals which have
         * signal handlers associated with them. for some, special setup
         * is required before the signal handler is called. in all cases,
         * if the signal handler returns, -1 is returned by this function
         * to resume execution at the point where the exception occurred.
         */
        phandler = pxcptact->XcptAction;

        /*
         * save the old value of _pxcptinfoptrs (in case this is a nested
         * exception/signal) and store the current one.
         */
        oldpxcptinfoptrs = PXCPTINFOPTRS;
        PXCPTINFOPTRS = pxcptinfoptrs;

        /*
         * call the user-supplied signal handler
         *
         * floating point exceptions must be handled specially since, from
         * the C point-of-view, there is only one signal. the exact identity
         * of the exception is passed in the global variable _fpecode.
         */
        if ( pxcptact->SigNum == SIGFPE ) {

                /*
                 * reset the XcptAction field to the default for all entries
                 * corresponding to SIGFPE.
                 */
                for ( indx = _First_FPE_Indx ;
                      indx < _First_FPE_Indx + _Num_FPE ;
                      indx++ )
                {
#ifdef _MT
                        ( (struct _XCPT_ACTION *)(ptd->_pxcptacttab) +
                          indx )->XcptAction = SIG_DFL;
#else  /* _MT */
                        _XcptActTab[indx].XcptAction = SIG_DFL;
#endif  /* _MT */
                }

                /*
                 * Save the current _fpecode in case it is a nested floating
                 * point exception (not clear that we need to support this,
                 * but it's easy).
                 */
                oldfpecode = FPECODE;

                /*
                 * there are no exceptions corresponding to
                 * following _FPE_xxx codes:
                 *
                 *      _FPE_UNEMULATED
                 *      _FPE_SQRTNEG
                 *
                 * futhermore, STATUS_FLOATING_STACK_CHECK is
                 * raised for both floating point stack under-
                 * flow and overflow. thus, the exception does
                 * not distinguish between _FPE_STACKOVERLOW
                 * and _FPE_STACKUNDERFLOW. arbitrarily, _fpecode
                 * is set to the former value.
                 *
                 * the following should be a switch statement but, alas, the
                 * compiler doesn't like switching on unsigned longs...
                 */
                if ( pxcptact->XcptNum == STATUS_FLOAT_DIVIDE_BY_ZERO )

                        FPECODE = _FPE_ZERODIVIDE;

                else if ( pxcptact->XcptNum == STATUS_FLOAT_INVALID_OPERATION )

                        FPECODE = _FPE_INVALID;

                else if ( pxcptact->XcptNum == STATUS_FLOAT_OVERFLOW )

                        FPECODE = _FPE_OVERFLOW;

                else if ( pxcptact->XcptNum == STATUS_FLOAT_UNDERFLOW )

                        FPECODE = _FPE_UNDERFLOW;

                else if ( pxcptact->XcptNum == STATUS_FLOAT_DENORMAL_OPERAND )

                        FPECODE = _FPE_DENORMAL;

                else if ( pxcptact->XcptNum == STATUS_FLOAT_INEXACT_RESULT )

                        FPECODE = _FPE_INEXACT;

                else if ( pxcptact->XcptNum == STATUS_FLOAT_STACK_CHECK )

                        FPECODE = _FPE_STACKOVERFLOW;

                /*
                 * call the SIGFPE handler. note the special code to support
                 * old MS-C programs whose SIGFPE handlers expect two args.
                 *
                 * NOTE: THE CAST AND CALL BELOW DEPEND ON __cdecl BEING
                 * CALLER CLEANUP!
                 */
                (*(void (__cdecl *)(int, int))phandler)(SIGFPE, FPECODE);

                /*
                 * restore the old value of _fpecode
                 */
                FPECODE = oldfpecode;
        }
        else {
                /*
                 * reset the XcptAction field to the default, then call the
                 * user-supplied handler
                 */
                pxcptact->XcptAction = SIG_DFL;
                (*phandler)(pxcptact->SigNum);
        }

        /*
         * restore the old value of _pxcptinfoptrs
         */
        PXCPTINFOPTRS = oldpxcptinfoptrs;

        return(EXCEPTION_CONTINUE_EXECUTION);

}


/***
*struct _XCPT_ACTION * xcptlookup(xcptnum, pxcptrec) - look up exception-action
*       table entry for xcptnum
*
*Purpose:
*       Find the in _XcptActTab[] whose Xcptnum field is xcptnum.
*
*Entry:
*       unsigned long xcptnum            - exception type
*
*       _PEXCEPTIONREPORTRECORD pxcptrec - pointer to exception report record
*       (used only to distinguish different types of XCPT_SIGNAL)
*
*Exit:
*       If successful, pointer to the table entry. If no such entry, NULL is
*       returned.
*
*Exceptions:
*
*******************************************************************************/

#ifdef _MT

static struct _XCPT_ACTION * __cdecl xcptlookup (
        unsigned long xcptnum,
        struct _XCPT_ACTION * pxcptacttab
        )

#else  /* _MT */

static struct _XCPT_ACTION * __cdecl xcptlookup (
        unsigned long xcptnum
        )

#endif  /* _MT */

{
#ifdef _MT
        struct _XCPT_ACTION *pxcptact = pxcptacttab;
#else  /* _MT */
        struct _XCPT_ACTION *pxcptact = _XcptActTab;
#endif  /* _MT */

        /*
         * walk thru the _xcptactab table looking for the proper entry
         */
#ifdef _MT

        while ( (pxcptact->XcptNum != xcptnum) &&
                (++pxcptact < pxcptacttab + _XcptActTabCount) ) ;

#else  /* _MT */

        while ( (pxcptact->XcptNum != xcptnum) &&
                (++pxcptact < _XcptActTab + _XcptActTabCount) ) ;

#endif  /* _MT */

        /*
         * if no table entry was found corresponding to xcptnum, return NULL
         */
#ifdef _MT
        if ( (pxcptact >= pxcptacttab + _XcptActTabCount) ||
#else  /* _MT */
        if ( (pxcptact >= _XcptActTab + _XcptActTabCount) ||
#endif  /* _MT */
             (pxcptact->XcptNum != xcptnum) )
                return(NULL);

        return(pxcptact);
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人福利片| 成人自拍视频在线观看| 亚洲人成网站在线| 国产精品国产成人国产三级 | 一二三区精品视频| 自拍偷拍欧美精品| 夜夜嗨av一区二区三区网页| 亚洲精品高清在线| 五月婷婷综合网| 免费在线欧美视频| 久久精品国产99| 日日噜噜夜夜狠狠视频欧美人 | 欧美国产日本韩| 久久亚洲精品国产精品紫薇| 国产亚洲女人久久久久毛片| 亚洲欧美中日韩| 亚洲一区二区三区四区五区黄| 午夜欧美2019年伦理| 蜜臀久久99精品久久久久宅男| 色综合久久综合| 欧美色成人综合| 精品久久久久久久久久久久包黑料 | 粗大黑人巨茎大战欧美成人| 91免费国产视频网站| 欧美日韩国产色站一区二区三区| 欧美va亚洲va香蕉在线| 国产精品国产三级国产专播品爱网 | 成人av在线一区二区三区| 在线视频你懂得一区二区三区| 91精品久久久久久久91蜜桃| 国产亚洲欧美激情| 亚洲一二三区在线观看| 国产一区二区三区久久久| 日本久久电影网| 精品免费国产一区二区三区四区| 亚洲欧洲美洲综合色网| 日韩电影网1区2区| www.久久精品| 欧美一区午夜视频在线观看| 亚洲欧洲精品一区二区三区| 免费观看一级特黄欧美大片| 成人h动漫精品| 日韩欧美国产电影| 亚洲免费观看高清在线观看| 黑人巨大精品欧美黑白配亚洲| a美女胸又www黄视频久久| 欧美精品一区二区三区久久久 | 久久er99精品| 色香蕉成人二区免费| 国产欧美日韩亚州综合| 调教+趴+乳夹+国产+精品| 99国内精品久久| 亚洲国产成人在线| 国产一区二区日韩精品| 91精品国产乱| 午夜久久久久久久久久一区二区| av高清不卡在线| 久久九九久久九九| 国产在线视频一区二区三区| 欧美一区欧美二区| 三级一区在线视频先锋| 一本大道av伊人久久综合| 国产女主播在线一区二区| 久久超碰97中文字幕| 91精品国产美女浴室洗澡无遮挡| 一区av在线播放| 一本大道综合伊人精品热热 | 91精品国产91综合久久蜜臀| 一区二区三区四区在线| 色综合久久久久综合99| 国产精品美女视频| 大桥未久av一区二区三区中文| 欧美电影免费提供在线观看| 奇米影视在线99精品| 欧美精品自拍偷拍动漫精品| 亚洲午夜久久久久久久久久久| 色欧美片视频在线观看在线视频| 国产精品成人免费在线| 99精品欧美一区二区三区小说 | 黄色日韩网站视频| 日韩欧美色电影| 免费在线一区观看| 欧美精品一区二区三区视频| 国模娜娜一区二区三区| 中文一区二区完整视频在线观看| 成人免费视频一区| 亚洲同性gay激情无套| 色婷婷久久久亚洲一区二区三区| 一区二区免费看| 欧美夫妻性生活| 国产一区二区免费视频| 亚洲欧美日韩在线不卡| 欧美怡红院视频| 毛片基地黄久久久久久天堂| 国产农村妇女精品| 色婷婷综合久久久久中文一区二区 | 91视频91自| 午夜精品久久久| 久久久一区二区| 色综合视频在线观看| 日本不卡一二三| 国产欧美日韩在线| 欧美性生活久久| 国产精品自拍一区| 亚洲一区二区中文在线| 精品成人佐山爱一区二区| 91美女福利视频| 精品在线一区二区| 中文字幕亚洲精品在线观看| 91精品免费观看| 成人app网站| 美国欧美日韩国产在线播放| 国产精品久久午夜| 日韩一区二区三区精品视频| 972aa.com艺术欧美| 精品亚洲免费视频| 亚洲影院理伦片| 欧美国产成人精品| 日韩午夜激情电影| 91搞黄在线观看| 国产激情91久久精品导航 | 亚洲免费观看高清完整| 欧美xxxx老人做受| 欧美日韩国产大片| 91一区一区三区| 国产精品一区专区| 日本不卡视频在线观看| 亚洲免费在线播放| 国产精品嫩草影院com| 日韩美一区二区三区| 欧美在线免费观看亚洲| 成人av电影在线网| 国产一区二区主播在线| 日韩av电影一区| 亚州成人在线电影| 一区二区三区精品在线| 国产欧美日韩三级| 国产亚洲美州欧州综合国| 精品美女被调教视频大全网站| 欧美色涩在线第一页| 色香蕉久久蜜桃| 色视频成人在线观看免| 91亚洲精品久久久蜜桃| 99精品黄色片免费大全| av亚洲精华国产精华| 东方aⅴ免费观看久久av| 久色婷婷小香蕉久久| 强制捆绑调教一区二区| 奇米精品一区二区三区在线观看一 | 在线观看一区日韩| 色综合久久中文综合久久牛| 99视频一区二区| 91丨九色porny丨蝌蚪| 色域天天综合网| 在线观看日韩高清av| 欧美日韩成人在线| 91精品国产综合久久国产大片| 欧美日韩在线播放三区| 51精品久久久久久久蜜臀| 91精品国产综合久久精品麻豆| 欧美精品粉嫩高潮一区二区| 91精品国产福利| 国产亚洲精品超碰| 国产精品久久久久久久久图文区| 国产网站一区二区| 亚洲欧美日韩中文播放| 天天操天天色综合| 麻豆久久一区二区| 成人国产在线观看| 欧洲生活片亚洲生活在线观看| 欧美高清视频一二三区| wwwwww.欧美系列| 亚洲色图一区二区| 日本视频一区二区三区| 国产麻豆精品视频| 91热门视频在线观看| 91精品久久久久久蜜臀| 中文字幕不卡在线| 亚洲夂夂婷婷色拍ww47| 美日韩一区二区三区| 国产 欧美在线| 欧美日韩一级二级三级| 久久色.com| 亚洲午夜精品在线| 国产福利一区二区三区视频| 91福利视频网站| 97久久超碰精品国产| 欧美一级高清大全免费观看| 国产婷婷色一区二区三区四区| 亚洲激情图片qvod| 国产精品自拍av| 欧美午夜精品一区二区三区| 久久久久久99精品| 午夜天堂影视香蕉久久| 不卡av在线免费观看| 日韩精品综合一本久道在线视频| 亚洲视频 欧洲视频| 韩日av一区二区| 91精品国产综合久久小美女| |精品福利一区二区三区|