VirtualBox

Changeset 93952 in vbox


Ignore:
Timestamp:
Feb 25, 2022 2:24:07 PM (3 years ago)
Author:
vboxsync
Message:

DevFwCommon: Tweaks for making it build with GCC 11.2.1 and some cleanups.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/DevFwCommon.cpp

    r93528 r93952  
    489489                                           N_("Configuration error: Querying \"" name "\" as a string failed")); \
    490490            } \
    491             else if (!strcmp(szBuf, "<EMPTY>")) \
     491            if (!strcmp(szBuf, "<EMPTY>")) \
    492492                pszTmp = ""; \
    493493            else \
     
    499499        { \
    500500            variable = iStrNr++; \
    501             size_t cStr = strlen(pszTmp) + 1; \
    502             DMI_CHECK_SIZE(cStr); \
    503             memcpy(pszStr, pszTmp, cStr); \
    504             pszStr += cStr ; \
     501            size_t const cbStr = strlen(pszTmp) + 1; \
     502            DMI_CHECK_SIZE(cbStr); \
     503            pszStr = (char *)mempcpy(pszStr, pszTmp, cbStr); \
    505504        } \
    506505    }
     
    529528    }
    530529
    531 #define DMI_START_STRUCT(tbl) \
    532         pszStr                       = (char *)(tbl + 1); \
    533         iStrNr                       = 1;
    534 
    535 #define DMI_TERM_STRUCT \
    536     { \
     530#define DMI_START_STRUCT(a_pTbl) do { \
     531        pszStr = (char *)((a_pTbl) + 1); \
     532        iStrNr = 1; \
     533    } while (0)
     534
     535#if 0 /* GCC 11.2.1 barfs on this: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=] */
     536# define DMI_TERM_STRUCT do { \
    537537        *pszStr++                    = '\0'; /* terminate set of text strings */ \
    538538        if (iStrNr == 1) \
    539539            *pszStr++                = '\0'; /* terminate a structure without strings */ \
    540     }
     540    } while (0)
     541#else
     542# define DMI_TERM_STRUCT do { \
     543        size_t const cbToZero = iStrNr == 1 ? 2 : 1; \
     544        pszStr = (char *)memset(pszStr, 0, cbToZero) + cbToZero; \
     545    } while (0)
     546#endif
    541547
    542548    bool fForceDefault = false;
     
    730736        PDMICHASSIS pChassis         = (PDMICHASSIS)pszStr;
    731737        DMI_CHECK_SIZE(sizeof(*pChassis));
    732         pszStr                       = (char*)&pChassis->u32OEMdefined;
     738        pszStr                       = (char *)&pChassis->u32OEMdefined;
    733739        iStrNr                       = 1;
    734740#ifdef VBOX_WITH_DMI_CHASSIS
     
    781787        pProcessorInf->u8SocketDesignation = iStrNr++;
    782788        {
    783             size_t cStr = strlen(szSocket) + 1;
    784             DMI_CHECK_SIZE(cStr);
    785             memcpy(pszStr, szSocket, cStr);
    786             pszStr += cStr;
     789            size_t cbStr = strlen(szSocket) + 1;
     790            DMI_CHECK_SIZE(cbStr);
     791            pszStr = (char *)mempcpy(pszStr, szSocket, cbStr);
    787792        }
    788793        pProcessorInf->u8ProcessorType     = 0x03; /* Central Processor */
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