VirtualBox

Changeset 69011 in vbox


Ignore:
Timestamp:
Oct 9, 2017 11:52:45 AM (7 years ago)
Author:
vboxsync
Message:

Added RTERRINFO_LOG_* macros for logging RTErrInfo setings to the right group.

Location:
trunk
Files:
3 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/err.h

    r68920 r69011  
    554554 */
    555555RTDECL(int)         RTErrInfoAddV(PRTERRINFO pErrInfo, int rc, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(3, 0);
     556
     557/** @name RTERRINFO_LOG_F_XXX
     558 * @{ */
     559/** Both debug and release log.   */
     560#define RTERRINFO_LOG_F_RELEASE         RT_BIT_32(0)
     561/** @} */
     562
     563/**
     564 * Fills in the error info details.
     565 *
     566 * @returns @a rc.
     567 *
     568 * @param   pErrInfo            The error info structure to fill in.
     569 * @param   rc                  The status code to return.
     570 * @param   iLogGroup           The logging group.
     571 * @param   fFlags              RTERRINFO_LOG_F_XXX.
     572 * @param   pszMsg              The error message string.
     573 */
     574RTDECL(int)         RTErrInfoLogAndSet(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszMsg);
     575
     576/**
     577 * Fills in the error info details, with a sprintf style message.
     578 *
     579 * @returns @a rc.
     580 *
     581 * @param   pErrInfo            The error info structure to fill in.
     582 * @param   rc                  The status code to return.
     583 * @param   iLogGroup           The logging group.
     584 * @param   fFlags              RTERRINFO_LOG_F_XXX.
     585 * @param   pszFormat           The format string.
     586 * @param   ...                 The format arguments.
     587 */
     588RTDECL(int)         RTErrInfoLogAndSetF(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(5, 6);
     589
     590/**
     591 * Fills in the error info details, with a vsprintf style message.
     592 *
     593 * @returns @a rc.
     594 *
     595 * @param   pErrInfo            The error info structure to fill in.
     596 * @param   rc                  The status code to return.
     597 * @param   iLogGroup           The logging group.
     598 * @param   fFlags              RTERRINFO_LOG_F_XXX.
     599 * @param   pszFormat           The format string.
     600 * @param   va                  The format arguments.
     601 */
     602RTDECL(int)         RTErrInfoLogAndSetV(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(5, 0);
     603
     604/**
     605 * Adds more error info details.
     606 *
     607 * @returns @a rc.
     608 *
     609 * @param   pErrInfo            The error info structure to fill in.
     610 * @param   rc                  The status code to return.
     611 * @param   iLogGroup           The logging group.
     612 * @param   fFlags              RTERRINFO_LOG_F_XXX.
     613 * @param   pszMsg              The error message string to add.
     614 */
     615RTDECL(int)         RTErrInfoLogAndAdd(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszMsg);
     616
     617/**
     618 * Adds more error info details, with a sprintf style message.
     619 *
     620 * @returns @a rc.
     621 *
     622 * @param   pErrInfo            The error info structure to fill in.
     623 * @param   rc                  The status code to return.
     624 * @param   iLogGroup           The logging group.
     625 * @param   fFlags              RTERRINFO_LOG_F_XXX.
     626 * @param   pszFormat           The format string to add.
     627 * @param   ...                 The format arguments.
     628 */
     629RTDECL(int)         RTErrInfoLogAndAddF(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(5, 6);
     630
     631/**
     632 * Adds more error info details, with a vsprintf style message.
     633 *
     634 * @returns @a rc.
     635 *
     636 * @param   pErrInfo            The error info structure to fill in.
     637 * @param   rc                  The status code to return.
     638 * @param   iLogGroup           The logging group.
     639 * @param   fFlags              RTERRINFO_LOG_F_XXX.
     640 * @param   pszFormat           The format string to add.
     641 * @param   va                  The format arguments.
     642 */
     643RTDECL(int)         RTErrInfoLogAndAddV(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(5, 0);
     644
     645/** @name Macros wrapping the RTErrInfoLog* functions.
     646 * @{ */
     647#define RTERRINFO_LOG_SET(  a_pErrInfo, a_rc, a_pszMsg)             RTErrInfoLogAndSet( a_pErrInfo, a_rc, LOG_GROUP, 0, a_pszMsg)
     648#define RTERRINFO_LOG_SET_V(a_pErrInfo, a_rc, a_pszMsg, a_va)       RTErrInfoLogAndSetV(a_pErrInfo, a_rc, LOG_GROUP, 0, a_pszMsg, a_va)
     649#define RTERRINFO_LOG_ADD(  a_pErrInfo, a_rc, a_pszMsg)             RTErrInfoLogAndAdd( a_pErrInfo, a_rc, LOG_GROUP, 0, a_pszMsg)
     650#define RTERRINFO_LOG_ADD_V(a_pErrInfo, a_rc, a_pszMsg, a_va)       RTErrInfoLogAndAddV(a_pErrInfo, a_rc, LOG_GROUP, 0, a_pszMsg, a_va)
     651#ifdef RT_COMPILER_SUPPORTS_VA_ARGS
     652# define RTERRINFO_LOG_ADD_F(a_pErrInfo, a_rc, ...)                 RTErrInfoLogAndAddF(a_pErrInfo, a_rc, LOG_GROUP, 0, __VA_ARGS__)
     653# define RTERRINFO_LOG_SET_F(a_pErrInfo, a_rc, ...)                 RTErrInfoLogAndSetF(a_pErrInfo, a_rc, LOG_GROUP, 0, __VA_ARGS__)
     654#endif
     655
     656#define RTERRINFO_LOG_REL_SET(  a_pErrInfo, a_rc, a_pszMsg)         RTErrInfoLogAndSet( a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, a_pszMsg)
     657#define RTERRINFO_LOG_REL_SET_V(a_pErrInfo, a_rc, a_pszMsg, a_va)   RTErrInfoLogAndSetV(a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, a_pszMsg, a_va)
     658#define RTERRINFO_LOG_REL_ADD(  a_pErrInfo, a_rc, a_pszMsg)         RTErrInfoLogAndAdd( a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, a_pszMsg)
     659#define RTERRINFO_LOG_REL_ADD_V(a_pErrInfo, a_rc, a_pszMsg, a_va)   RTErrInfoLogAndAddV(a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, a_pszMsg, a_va)
     660#ifdef RT_COMPILER_SUPPORTS_VA_ARGS
     661# define RTERRINFO_LOG_REL_ADD_F(a_pErrInfo, a_rc, ...)             RTErrInfoLogAndAddF(a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, __VA_ARGS__)
     662# define RTERRINFO_LOG_REL_SET_F(a_pErrInfo, a_rc, ...)             RTErrInfoLogAndSetF(a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, __VA_ARGS__)
     663#else
     664# define RTERRINFO_LOG_REL_ADD_F                                    RTErrInfoSetF
     665# define RTERRINFO_LOG_REL_SET_F                                    RTErrInfoAddF
     666#endif
     667/** @} */
     668
    556669
    557670/**
  • trunk/include/iprt/mangling.h

    r68884 r69011  
    839839# define RTErrInfoSetF                                  RT_MANGLER(RTErrInfoSetF)
    840840# define RTErrInfoSetV                                  RT_MANGLER(RTErrInfoSetV)
     841# define RTErrInfoLogAndSet                             RT_MANGLER(RTErrInfoLogAndSet)
     842# define RTErrInfoLogAndSetF                            RT_MANGLER(RTErrInfoLogAndSetF)
     843# define RTErrInfoLogAndSetV                            RT_MANGLER(RTErrInfoLogAndSetV)
     844# define RTErrInfoLogAndAdd                             RT_MANGLER(RTErrInfoLogAndAdd)
     845# define RTErrInfoLogAndAddF                            RT_MANGLER(RTErrInfoLogAndAddF)
     846# define RTErrInfoLogAndAddV                            RT_MANGLER(RTErrInfoLogAndAddV)
    841847# define RTErrVarsAreEqual                              RT_MANGLER(RTErrVarsAreEqual)
    842848# define RTErrVarsHaveChanged                           RT_MANGLER(RTErrVarsHaveChanged)
  • trunk/src/VBox/Runtime/Makefile.kmk

    r68995 r69011  
    424424        common/dvm/dvmvfs.cpp \
    425425        common/err/errinfo.cpp \
     426        common/err/errinfolog.cpp \
    426427        common/err/errinfo-alloc.cpp \
    427428        common/err/errmsg.cpp \
     
    23292330        common/checksum/sha512t256str.cpp \
    23302331        common/err/errinfo.cpp \
     2332        common/err/errinfolog.cpp \
    23312333        common/path/RTPathChangeToUnixSlashes.cpp \
    23322334        common/math/bignum.cpp \
  • trunk/src/VBox/Runtime/common/err/errinfolog.cpp

    r68980 r69011  
    3434#include <iprt/assert.h>
    3535#include <iprt/string.h>
     36#include <iprt/log.h>
    3637
    3738
    38 RTDECL(int) RTErrInfoSet(PRTERRINFO pErrInfo, int rc, const char *pszMsg)
     39RTDECL(int) RTErrInfoLogAndSet(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszMsg)
    3940{
     41    /* The logging: */
     42    if (fFlags & RTERRINFO_LOG_F_RELEASE)
     43    {
     44        PRTLOGGER pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(RTLOGGRPFLAGS_LEVEL_1, iLogGroup));
     45        if (pLogger)
     46            RTLogLoggerEx(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoSet(%Rrc): %s\n", rc, pszMsg);
     47    }
     48
     49    PRTLOGGER pLogger = RTLogGetDefaultInstanceEx(RT_MAKE_U32(RTLOGGRPFLAGS_LEVEL_1, iLogGroup));
     50    if (pLogger)
     51        RTLogLoggerEx(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoSet(%Rrc): %s\n", rc, pszMsg);
     52
     53    /* The setting: */
    4054    if (pErrInfo)
    4155    {
     
    5165
    5266
    53 RTDECL(int) RTErrInfoSetF(PRTERRINFO pErrInfo, int rc, const char *pszFormat, ...)
     67RTDECL(int) RTErrInfoLogAndSetF(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, ...)
    5468{
    5569    va_list va;
    5670    va_start(va, pszFormat);
    57     RTErrInfoSetV(pErrInfo, rc, pszFormat, va);
     71    RTErrInfoLogAndSetV(pErrInfo, rc, iLogGroup, fFlags, pszFormat, va);
    5872    va_end(va);
    5973    return rc;
     
    6175
    6276
    63 RTDECL(int) RTErrInfoSetV(PRTERRINFO pErrInfo, int rc, const char *pszFormat, va_list va)
     77RTDECL(int) RTErrInfoLogAndSetV(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, va_list va)
    6478{
     79    /* The logging: */
     80    if (fFlags & RTERRINFO_LOG_F_RELEASE)
     81    {
     82        PRTLOGGER pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(RTLOGGRPFLAGS_LEVEL_1, iLogGroup));
     83        if (pLogger)
     84            RTLogLoggerEx(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoSet(%Rrc): %N\n", rc, pszFormat, &va);
     85    }
     86
     87    PRTLOGGER pLogger = RTLogGetDefaultInstanceEx(RT_MAKE_U32(RTLOGGRPFLAGS_LEVEL_1, iLogGroup));
     88    if (pLogger)
     89        RTLogLoggerEx(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoSet(%Rrc): %N\n", rc, pszFormat, &va);
     90
     91    /* The setting: */
    6592    if (pErrInfo)
    6693    {
     
    76103
    77104
    78 RTDECL(int) RTErrInfoAdd(PRTERRINFO pErrInfo, int rc, const char *pszMsg)
     105RTDECL(int) RTErrInfoLogAndAdd(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszMsg)
    79106{
    80107    if (pErrInfo)
     
    90117        }
    91118    }
     119
     120    /* The logging: */
     121    if (fFlags & RTERRINFO_LOG_F_RELEASE)
     122    {
     123        PRTLOGGER pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(RTLOGGRPFLAGS_LEVEL_1, iLogGroup));
     124        if (pLogger)
     125            RTLogLoggerEx(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoAdd(%Rrc): %s\n", rc, pszMsg);
     126    }
     127
     128    PRTLOGGER pLogger = RTLogGetDefaultInstanceEx(RT_MAKE_U32(RTLOGGRPFLAGS_LEVEL_1, iLogGroup));
     129    if (pLogger)
     130        RTLogLoggerEx(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoAdd(%Rrc): %s\n", rc, pszMsg);
     131
    92132    return rc;
    93133}
    94134
    95135
    96 RTDECL(int) RTErrInfoAddF(PRTERRINFO pErrInfo, int rc, const char *pszFormat, ...)
     136RTDECL(int) RTErrInfoLogAndAddF(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, ...)
    97137{
    98138    va_list va;
    99139    va_start(va, pszFormat);
    100     RTErrInfoAddV(pErrInfo, rc, pszFormat, va);
     140    RTErrInfoLogAndAddV(pErrInfo, rc, iLogGroup, fFlags, pszFormat, va);
    101141    va_end(va);
    102142    return rc;
     
    104144
    105145
    106 RTDECL(int) RTErrInfoAddV(PRTERRINFO pErrInfo, int rc, const char *pszFormat, va_list va)
     146RTDECL(int) RTErrInfoLogAndAddV(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, va_list va)
    107147{
    108148    if (pErrInfo)
     
    114154            char *pszOut = (char *)memchr(pErrInfo->pszMsg, '\0', pErrInfo->cbMsg - 2);
    115155            if (pszOut)
    116                 RTStrPrintfV(pszOut, &pErrInfo->pszMsg[pErrInfo->cbMsg] - pszOut, pszFormat, va);
     156            {
     157                va_list va2;
     158                va_copy(va2, va);
     159                RTStrPrintfV(pszOut, &pErrInfo->pszMsg[pErrInfo->cbMsg] - pszOut, pszFormat, va2);
     160                va_end(va2);
     161            }
    117162        }
    118163        else
     
    123168        }
    124169    }
     170
     171    /* The logging: */
     172    if (fFlags & RTERRINFO_LOG_F_RELEASE)
     173    {
     174        PRTLOGGER pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(RTLOGGRPFLAGS_LEVEL_1, iLogGroup));
     175        if (pLogger)
     176            RTLogLoggerEx(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoAdd(%Rrc): %N\n", rc, pszFormat, &va);
     177    }
     178
     179    PRTLOGGER pLogger = RTLogGetDefaultInstanceEx(RT_MAKE_U32(RTLOGGRPFLAGS_LEVEL_1, iLogGroup));
     180    if (pLogger)
     181        RTLogLoggerEx(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoAdd(%Rrc): %N\n", rc, pszFormat, &va);
     182
    125183    return rc;
    126184}
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette