VirtualBox

Ignore:
Timestamp:
Jul 12, 2018 9:06:33 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
123672
Message:

*: Made RT_UOFFSETOF, RT_OFFSETOF, RT_UOFFSETOF_ADD and RT_OFFSETOF_ADD work like builtin_offsetof() and require compile time resolvable requests, adding RT_UOFFSETOF_DYN for the dynamic questions that can only be answered at runtime.

Location:
trunk/src/VBox/Runtime/common/path
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/path/RTPathGlob.cpp

    r69753 r73097  
    14751475    if (pGlob->cResults < RTPATHGLOB_MAX_RESULTS)
    14761476    {
    1477         PRTPATHGLOBENTRY pEntry = (PRTPATHGLOBENTRY)RTMemAlloc(RT_OFFSETOF(RTPATHGLOBENTRY, szPath[cchPath + 1]));
     1477        PRTPATHGLOBENTRY pEntry = (PRTPATHGLOBENTRY)RTMemAlloc(RT_UOFFSETOF_DYN(RTPATHGLOBENTRY, szPath[cchPath + 1]));
    14781478        if (pEntry)
    14791479        {
     
    15151515    if (pGlob->cResults < RTPATHGLOB_MAX_RESULTS)
    15161516    {
    1517         PRTPATHGLOBENTRY pEntry = (PRTPATHGLOBENTRY)RTMemAlloc(RT_OFFSETOF(RTPATHGLOBENTRY, szPath[cchPath + cchName + 1]));
     1517        PRTPATHGLOBENTRY pEntry = (PRTPATHGLOBENTRY)RTMemAlloc(RT_UOFFSETOF_DYN(RTPATHGLOBENTRY, szPath[cchPath + cchName + 1]));
    15181518        if (pEntry)
    15191519        {
     
    15591559    if (pGlob->cResults < RTPATHGLOB_MAX_RESULTS)
    15601560    {
    1561         PRTPATHGLOBENTRY pEntry = (PRTPATHGLOBENTRY)RTMemAlloc(RT_OFFSETOF(RTPATHGLOBENTRY, szPath[cchPath + cchName + 1]));
     1561        PRTPATHGLOBENTRY pEntry = (PRTPATHGLOBENTRY)RTMemAlloc(RT_UOFFSETOF_DYN(RTPATHGLOBENTRY, szPath[cchPath + cchName + 1]));
    15621562        if (pEntry)
    15631563        {
     
    20832083     * Parse the path.
    20842084     */
    2085     size_t        cbParsed = RT_OFFSETOF(RTPATHPARSED, aComps[1]); /** @todo 16 after testing */
     2085    size_t        cbParsed = RT_UOFFSETOF(RTPATHPARSED, aComps[1]); /** @todo 16 after testing */
    20862086    PRTPATHPARSED pParsed = (PRTPATHPARSED)RTMemTmpAlloc(cbParsed);
    20872087    AssertReturn(pParsed, VERR_NO_MEMORY);
     
    20892089    if (rc == VERR_BUFFER_OVERFLOW)
    20902090    {
    2091         cbParsed = RT_OFFSETOF(RTPATHPARSED, aComps[pParsed->cComps + 1]);
     2091        cbParsed = RT_UOFFSETOF_DYN(RTPATHPARSED, aComps[pParsed->cComps + 1]);
    20922092        RTMemTmpFree(pParsed);
    20932093        pParsed = (PRTPATHPARSED)RTMemTmpAlloc(cbParsed);
     
    21122112             * Allocate and initialize the glob state data structure.
    21132113             */
    2114             size_t      cbGlob = RT_OFFSETOF(RTPATHGLOB, aComps[pParsed->cComps + 1]);
     2114            size_t      cbGlob = RT_UOFFSETOF_DYN(RTPATHGLOB, aComps[pParsed->cComps + 1]);
    21152115            PRTPATHGLOB pGlob  = (PRTPATHGLOB)RTMemTmpAllocZ(cbGlob);
    21162116            if (pGlob)
  • trunk/src/VBox/Runtime/common/path/RTPathSplit.cpp

    r69111 r73097  
    7373    uint16_t const  cchPath   = pParsedVolatile->cchPath;
    7474    uint16_t const  offSuffix = pParsedVolatile->offSuffix;
    75     uint32_t        cbNeeded  = RT_OFFSETOF(RTPATHSPLIT, apszComps[cComps])
     75    uint32_t        cbNeeded  = RT_UOFFSETOF_DYN(RTPATHSPLIT, apszComps[cComps])
    7676                              + cchPath
    7777                              + RTPATH_PROP_FIRST_NEEDS_NO_SLASH(fProps) /* zero terminator for root spec. */
  • trunk/src/VBox/Runtime/common/path/RTPathSplitA.cpp

    r69111 r73097  
    4949     */
    5050    size_t cbSplit = strlen(pszPath);
    51     cbSplit += RT_OFFSETOF(RTPATHSPLIT, apszComps[cbSplit / 8]) + cbSplit / 8 + 8;
     51    cbSplit += RT_UOFFSETOF_DYN(RTPATHSPLIT, apszComps[cbSplit / 8]) + cbSplit / 8 + 8;
    5252    cbSplit = RT_ALIGN(cbSplit, 64);
    5353    PRTPATHSPLIT pSplit = (PRTPATHSPLIT)RTMemAllocTag(cbSplit, pszTag);
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