⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 option.c

📁 debug source code under unix platform.
💻 C
📖 第 1 页 / 共 4 页
字号:
                        i = OE_RECOGNISED;                    h->flags |= FLG_LOGREALLOCS;                }                break;              case 'M':                if (matchoption(o, "MEDIUMBOUND"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else                    {                        if (n == 0)                            h->prof.mbound = MP_MEDIUMBOUND;                        else                            h->prof.mbound = n;                        i = OE_RECOGNISED;                    }                break;              case 'N':                if (matchoption(o, "NOFREE"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else                    {                        if (h->alloc.fmax = n)                            h->alloc.flags |= FLG_NOFREE;                        else                            h->alloc.flags &= ~FLG_NOFREE;                        i = OE_RECOGNISED;                    }                else if (matchoption(o, "NOPROTECT"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_NOPROTECT;                }                break;              case 'O':                if (matchoption(o, "OFLOWBYTE"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else if (n > 0xFF)                        i = OE_BIGNUMBER;                    else                    {                        h->alloc.obyte = n;                        i = OE_RECOGNISED;                    }                else if (matchoption(o, "OFLOWSIZE"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if ((a[readnumber(a, (long *) &n, 1)] != '\0') ||                             ((n == 0) && (h->alloc.flags & FLG_PAGEALLOC)))                        i = OE_BADNUMBER;                    else                    {                        h->alloc.oflow = __mp_poweroftwo(n);                        if (h->alloc.flags & FLG_PAGEALLOC)                            h->alloc.oflow = __mp_roundup(h->alloc.oflow,                                             h->alloc.heap.memory.page);                        i = OE_RECOGNISED;                    }                else if (matchoption(o, "OFLOWWATCH"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;#if MP_WATCH_SUPPORT                    h->alloc.flags |= FLG_OFLOWWATCH;#endif /* MP_WATCH_SUPPORT */                }                break;              case 'P':                if (matchoption(o, "PAGEALLOC"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (matchoption(a, "LOWER"))                    {#if MP_PROTECT_SUPPORT                        h->alloc.flags |= FLG_PAGEALLOC;                        if (h->alloc.oflow == 0)                            h->alloc.oflow = 1;                        h->alloc.oflow = __mp_roundup(h->alloc.oflow,                                         h->alloc.heap.memory.page);#endif /* MP_PROTECT_SUPPORT */                        i = OE_RECOGNISED;                    }                    else if (matchoption(a, "UPPER"))                    {#if MP_PROTECT_SUPPORT                        h->alloc.flags |= FLG_PAGEALLOC | FLG_ALLOCUPPER;                        if (h->alloc.oflow == 0)                            h->alloc.oflow = 1;                        h->alloc.oflow = __mp_roundup(h->alloc.oflow,                                         h->alloc.heap.memory.page);#endif /* MP_PROTECT_SUPPORT */                        i = OE_RECOGNISED;                    }                    else                        i = OE_LOWERORUPPER;                else if (matchoption(o, "PRESERVE"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->alloc.flags |= FLG_PRESERVE;                }                else if (matchoption(o, "PROF"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->prof.profiling = 1;                }                else if (matchoption(o, "PROFFILE"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else                    {                        p = a;                        i = OE_RECOGNISED;                    }                else if (matchoption(o, "PROGFILE"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else                    {                        h->alloc.heap.memory.prog = a;                        i = OE_RECOGNISED;                    }                break;              case 'R':                if (matchoption(o, "REALLOCSTOP"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else                    {                        h->rstop = n;                        i = OE_RECOGNISED;                    }                break;              case 'S':                if (matchoption(o, "SAFESIGNALS"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_SAFESIGNALS;                }                else if (matchoption(o, "SHOWALL"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_SHOWFREE | FLG_SHOWFREED | FLG_SHOWUNFREED |                                FLG_SHOWMAP | FLG_SHOWSYMBOLS;                }                else if (matchoption(o, "SHOWFREE"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_SHOWFREE;                }                else if (matchoption(o, "SHOWFREED"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_SHOWFREED;                }                else if (matchoption(o, "SHOWMAP"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_SHOWMAP;                }                else if (matchoption(o, "SHOWSYMBOLS"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_SHOWSYMBOLS;                }                else if (matchoption(o, "SHOWUNFREED"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->flags |= FLG_SHOWUNFREED;                }                else if (matchoption(o, "SMALLBOUND"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else                    {                        if (n == 0)                            h->prof.sbound = MP_SMALLBOUND;                        else                            h->prof.sbound = n;                        i = OE_RECOGNISED;                    }                break;              case 'T':                if (matchoption(o, "TRACE"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->trace.tracing = 1;                    h->alloc.heap.tracing = 1;                }                else if (matchoption(o, "TRACEFILE"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else                    {                        t = a;                        i = OE_RECOGNISED;                    }                break;              case 'U':                if (matchoption(o, "UNFREEDABORT"))                    if (*a == '\0')                        i = OE_NOARGUMENT;                    else if (a[readnumber(a, (long *) &n, 1)] != '\0')                        i = OE_BADNUMBER;                    else                    {                        h->uabort = n;                        i = OE_RECOGNISED;                    }                else if (matchoption(o, "USEDEBUG"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;                    h->syms.lineinfo = 1;                }                else if (matchoption(o, "USEMMAP"))                {                    if (*a != '\0')                        i = OE_IGNARGUMENT;                    else                        i = OE_RECOGNISED;#if MP_MMAP_SUPPORT                    if (h->alloc.list.size == 0)                        h->alloc.heap.memory.flags |= FLG_USEMMAP;#endif /* MP_MMAP_SUPPORT */                }                break;              default:                break;            }            /* Now check the error code returned from attempting to match             * the keyword and report if anything went wrong.             */            switch (i)            {              case OE_UNRECOGNISED:                if (*a == '\0')                    __mp_error(ET_MAX, AT_MAX, NULL, 0, "unrecognised option "                               "`%s'\n", o);                else                    __mp_error(ET_MAX, AT_MAX, NULL, 0, "unrecognised option "                               "`%s=%s'\n", o, a);                break;              case OE_NOARGUMENT:                __mp_error(ET_MAX, AT_MAX, NULL, 0, "missing argument for "                           "option `%s'\n", o);                break;              case OE_BADNUMBER:                __mp_error(ET_MAX, AT_MAX, NULL, 0, "bad numeric argument `%s' "                           "for option `%s'\n", a, o);                break;              case OE_BADRANGE:                __mp_error(ET_MAX, AT_MAX, NULL, 0, "bad numeric range `%s' "                           "for option `%s'\n", a, o);                break;              case OE_BIGNUMBER:                __mp_error(ET_MAX, AT_MAX, NULL, 0, "numeric argument `%s' is "                           "too large for option `%s'\n", a, o);                break;              case OE_LOWERORUPPER:                __mp_error(ET_MAX, AT_MAX, NULL, 0, "must specify `LOWER' or "                           "`UPPER' for option `%s'\n", o);                break;              case OE_IGNARGUMENT:                __mp_warn(ET_MAX, AT_MAX, NULL, 0, "ignoring argument `%s' for "                          "option `%s'\n", a, o);                break;              default:                break;            }        }        else if (*a != '\0')            __mp_warn(ET_MAX, AT_MAX, NULL, 0, "missing option for argument "                      "`%s'\n", a);    }    /* Check the validity of the profiling allocation boundaries.  There is     * potential for error if either of the small or large bounds overlap the     * medium bound and the medium bound is either 1 or the maximum sized     * integer, but it will just result in wrong profiling and nothing more.     */    if (h->prof.sbound >= h->prof.mbound)    {        __mp_error(ET_MAX, AT_MAX, NULL, 0, "small allocation boundary `%lu' "                   "overlaps medium allocation boundary `%lu'\n",                   h->prof.sbound, h->prof.mbound);        h->prof.sbound = h->prof.mbound - 1;    }    if (h->prof.lbound <= h->prof.mbound)    {        __mp_error(ET_MAX, AT_MAX, NULL, 0, "large allocation boundary `%lu' "                   "overlaps medium allocation boundary `%lu'\n",                   h->prof.lbound, h->prof.mbound);        h->prof.lbound = h->prof.mbound + 1;    }    /* Show the quick-reference option summary if it was requested.     */    if (l != 0)        showoptions();    /* Set up the filenames of the log, profiling and tracing files if they     * were overridden.     */    if (f != NULL)        h->log = __mp_logfile(&h->alloc.heap.memory, f);    if (p != NULL)        h->prof.file = __mp_proffile(&h->alloc.heap.memory, p);    if (t != NULL)        h->trace.file = __mp_tracefile(&h->alloc.heap.memory, t);}/* Set mpatrol flags after the library has been initialised. */staticunsigned longsetflags(infohead *h, unsigned long f, int u){    unsigned long i;    if (f == 0)        return 0;    for (i = 1; i != 0; i <<= 1)        if (f & i)        {            f &= ~i;            switch (i)            {              case OPT_CHECKALLOCS:                if (u == 0)                    h->flags |= FLG_CHECKALLOCS;                else                    h->flags &= ~FLG_CHECKALLOCS;                break;              case OPT_CHECKREALLOCS:                if (u == 0)                    h->flags |= FLG_CHECKREALLOCS;                else                    h->flags &= ~FLG_CHECKREALLOCS;                break;              case OPT_CHECKFREES:                if (u == 0)                    h->flags |= FLG_CHECKFREES;                else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -