VirtualBox

Changeset 98001 in vbox for trunk/src/VBox/Runtime/common


Ignore:
Timestamp:
Jan 5, 2023 2:00:47 PM (2 years ago)
Author:
vboxsync
Message:

IPRT/errinfolog.cpp: Can't use parameter va_list with %N, must pass stack copy (known gcc issue). Also a bit wrong to use it multiple times w/o copying.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/err/errinfolog.cpp

    r96448 r98001  
    9292        PRTLOGGER pLogger = RTLogRelGetDefaultInstanceExWeak(RT_MAKE_U32(RTLOGGRPFLAGS_LEVEL_1, iLogGroup));
    9393        if (pLogger)
    94             RTLogLoggerExWeak(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoSet(%Rrc): %N\n", rc, pszFormat, &va);
    95     }
    96 
    97     PRTLOGGER pLogger = RTLogGetDefaultInstanceExWeak(RT_MAKE_U32(RTLOGGRPFLAGS_LEVEL_1, iLogGroup));
    98     if (pLogger)
    99         RTLogLoggerExWeak(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoSet(%Rrc): %N\n", rc, pszFormat, &va);
     94        {
     95            va_list va2;
     96            va_copy(va2, va);
     97            RTLogLoggerExWeak(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoSet(%Rrc): %N\n", rc, pszFormat, &va2);
     98            va_end(va2);
     99        }
     100    }
     101
     102    PRTLOGGER pLogger = RTLogGetDefaultInstanceExWeak(RT_MAKE_U32(RTLOGGRPFLAGS_LEVEL_1, iLogGroup));
     103    if (pLogger)
     104    {
     105        va_list va2;
     106        va_copy(va2, va);
     107        RTLogLoggerExWeak(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoSet(%Rrc): %N\n", rc, pszFormat, &va2);
     108        va_end(va2);
     109    }
    100110
    101111    /* The setting: */
     
    184194        PRTLOGGER pLogger = RTLogRelGetDefaultInstanceExWeak(RT_MAKE_U32(RTLOGGRPFLAGS_LEVEL_1, iLogGroup));
    185195        if (pLogger)
    186             RTLogLoggerExWeak(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoAdd(%Rrc): %N\n", rc, pszFormat, &va);
    187     }
    188 
    189     PRTLOGGER pLogger = RTLogGetDefaultInstanceExWeak(RT_MAKE_U32(RTLOGGRPFLAGS_LEVEL_1, iLogGroup));
    190     if (pLogger)
    191         RTLogLoggerExWeak(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoAdd(%Rrc): %N\n", rc, pszFormat, &va);
    192 
    193     return rc;
    194 }
    195 
     196        {
     197            va_list va2;
     198            va_copy(va2, va);
     199            RTLogLoggerExWeak(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoAdd(%Rrc): %N\n", rc, pszFormat, &va2);
     200            va_end(va2);
     201        }
     202    }
     203
     204    PRTLOGGER pLogger = RTLogGetDefaultInstanceExWeak(RT_MAKE_U32(RTLOGGRPFLAGS_LEVEL_1, iLogGroup));
     205    if (pLogger)
     206    {
     207        va_list va2;
     208        va_copy(va2, va);
     209        RTLogLoggerExWeak(pLogger, RTLOGGRPFLAGS_LEVEL_1, iLogGroup, "RTErrInfoAdd(%Rrc): %N\n", rc, pszFormat, &va2);
     210        va_end(va2);
     211    }
     212
     213    return rc;
     214}
     215
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