VirtualBox

Changeset 1924 in kBuild


Ignore:
Timestamp:
Oct 24, 2008 2:41:34 AM (16 years ago)
Author:
bird
Message:

kbuild.c: some more cleanup.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/kbuild.c

    r1923 r1924  
    354354 */
    355355static void
    356 kbuild_apply_defpath(struct variable *pDefPath, char **ppsz, int *pcch, int *pcchAlloc, int fCanFree)
     356kbuild_apply_defpath(struct variable *pDefPath, char **ppsz, unsigned int *pcch, int *pcchAlloc, int fCanFree)
    357357{
    358358    const char *pszIterator;
     
    643643    struct variable *pVar = kbuild_lookup_variable_n(pszName, cchName);
    644644    if (pVar && pDefPath)
    645         kbuild_apply_defpath(pDefPath, &pVar->value, &pVar->value_length, &pVar->value_alloc_len, 1);
     645        kbuild_apply_defpath(pDefPath, &pVar->value, (unsigned int *)&pVar->value_length, &pVar->value_alloc_len, 1);
    646646    return pVar;
    647647}
     
    661661    struct variable *pVar = kbuild_lookup_variable(pszName);
    662662    if (pVar && pDefPath)
    663         kbuild_apply_defpath(pDefPath, &pVar->value, &pVar->value_length, &pVar->value_alloc_len, 1);
     663        kbuild_apply_defpath(pDefPath, &pVar->value, (unsigned int *)&pVar->value_length, &pVar->value_alloc_len, 1);
    664664    return pVar;
    665665}
     
    15301530    struct variable *pVar;
    15311531    unsigned iSdk, iSdkEnd;
    1532     int cVars, iVar, iVarEnd;
     1532    int cVars, iVar;
    15331533    size_t cchTotal, cchBuf;
    15341534    char *pszResult, *pszBuf, *psz, *psz2, *psz3;
     
    15361536    {
    15371537        struct variable    *pVar;
    1538         int                 cchExp;
     1538        unsigned int        cchExp;
    15391539        char               *pszExp;
    15401540    } *paVars;
     
    15591559    /*
    15601560     * Get the variables.
     1561     *
     1562     * The compiler will get a heart attack when it sees this code ... ;-)
    15611563     */
    15621564    cVars = 12 * (pSdks->c + 5);
     
    15641566
    15651567    iVar = 0;
     1568    cchTotal = 0;
    15661569
    15671570#define ADD_VAR(pVar)           do { my_memcpy(psz, (pVar)->value, (pVar)->value_length); psz += (pVar)->value_length; } while (0)
     
    15691572#define ADD_CSTR(pszStr)        do { my_memcpy(psz, pszStr, sizeof(pszStr) - 1); psz += sizeof(pszStr) - 1; } while (0)
    15701573#define ADD_CH(ch)              do { *psz++ = (ch); } while (0)
    1571 # define DO_VAR_LOOKUP() \
     1574#define DO_VAR_LOOKUP() \
    15721575    do { \
    15731576        pVar = kbuild_lookup_variable_n(pszBuf, psz - pszBuf); \
    1574         /*if (pVar)*/ \
    1575             paVars[iVar++].pVar = pVar; \
     1577        if (pVar) \
     1578        { \
     1579            paVars[iVar].pVar = pVar; \
     1580            if (    !pVar->recursive \
     1581                ||  !memchr(pVar->value, '$', pVar->value_length)) \
     1582            { \
     1583                paVars[iVar].pszExp = pVar->value; \
     1584                paVars[iVar].cchExp = pVar->value_length; \
     1585                if (pDefPath && paVars[iVar].cchExp) \
     1586                    kbuild_apply_defpath(pDefPath, &paVars[iVar].pszExp, &paVars[iVar].cchExp, NULL, 0); \
     1587                if (paVars[iVar].cchExp) \
     1588                { \
     1589                    cchTotal += paVars[iVar].cchExp + 1; \
     1590                    iVar++; \
     1591                } \
     1592            } \
     1593            else \
     1594            { \
     1595                paVars[iVar].pszExp = allocated_variable_expand_2(pVar->value, pVar->value_length, &paVars[iVar].cchExp); \
     1596                if (pDefPath && paVars[iVar].cchExp) \
     1597                    kbuild_apply_defpath(pDefPath, &paVars[iVar].pszExp, &paVars[iVar].cchExp, NULL, 1); \
     1598                if (paVars[iVar].cchExp) \
     1599                { \
     1600                    cchTotal += paVars[iVar].cchExp + 1; \
     1601                    iVar++; \
     1602                } \
     1603                else \
     1604                    free(paVars[iVar].pszExp); \
     1605            } \
     1606        } \
    15761607    } while (0)
    15771608#define DO_SINGLE_PSZ3_VARIATION() \
     
    17071738    free(pszBuf);
    17081739
    1709     /*assert(iVar <= cVars);
    1710     cVars = iVar;*/
    1711     assert(iVar == cVars);
    1712 
    1713     if (!cVars)
     1740    assert(iVar <= cVars);
     1741    cVars = iVar;
     1742
     1743    /*
     1744     * Construct the result value.
     1745     */
     1746    if (!cVars || !cchTotal)
    17141747        pVar = define_variable_vl(pszVarName, cchVarName, "", 0,
    17151748                                  1 /* duplicate value */ , o_local, 0 /* !recursive */);
    17161749    else
    17171750    {
    1718         /*
    1719          * Expand the variables and calculate the total length.
    1720          */
    1721         cchTotal = 0;
    1722         iVarEnd = iDirection == 1 ? cVars : 0;
    1723         for (iVar = iDirection == 1 ? 0 : cVars - 1; iVar != iVarEnd; iVar += iDirection)
     1751        psz = pszResult = xmalloc(cchTotal + 1);
     1752        if (iDirection == 1)
    17241753        {
    1725             if (!paVars[iVar].pVar)
     1754            for (iVar = 0; iVar < cVars; iVar++)
    17261755            {
    1727                 paVars[iVar].cchExp = 0;
    1728                 continue;
     1756                my_memcpy(psz, paVars[iVar].pszExp, paVars[iVar].cchExp);
     1757                psz += paVars[iVar].cchExp;
     1758                *psz++ = ' ';
     1759                if (paVars[iVar].pszExp != paVars[iVar].pVar->value)
     1760                    free(paVars[iVar].pszExp);
    17291761            }
    1730             if (    !paVars[iVar].pVar->recursive
    1731                 ||  !memchr(paVars[iVar].pVar->value, '$', paVars[iVar].pVar->value_length))
     1762        }
     1763        else
     1764        {
     1765            iVar = cVars;
     1766            while (iVar-- > 0)
    17321767            {
    1733                 paVars[iVar].pszExp = paVars[iVar].pVar->value;
    1734                 paVars[iVar].cchExp = paVars[iVar].pVar->value_length;
     1768                my_memcpy(psz, paVars[iVar].pszExp, paVars[iVar].cchExp);
     1769                psz += paVars[iVar].cchExp;
     1770                *psz++ = ' ';
     1771                if (paVars[iVar].pszExp != paVars[iVar].pVar->value)
     1772                    free(paVars[iVar].pszExp);
    17351773            }
    1736             else
    1737             {
    1738                 unsigned int cchExp;
    1739                 paVars[iVar].pszExp = allocated_variable_expand_2(paVars[iVar].pVar->value, paVars[iVar].pVar->value_length, &cchExp);
    1740                 paVars[iVar].cchExp = cchExp;
    1741             }
    1742             if (pDefPath)
    1743                 kbuild_apply_defpath(pDefPath, &paVars[iVar].pszExp, &paVars[iVar].cchExp, NULL,
    1744                                      paVars[iVar].pszExp != paVars[iVar].pVar->value);
    1745             cchTotal += paVars[iVar].cchExp + 1;
     1774
    17461775        }
    1747 
    1748         /*
    1749          * Construct the result value.
    1750          */
    1751         psz = pszResult = xmalloc(cchTotal + 1);
    1752         iVarEnd = iDirection == 1 ? cVars : 0;
    1753         for (iVar = iDirection == 1 ? 0 : cVars - 1; iVar != iVarEnd; iVar += iDirection)
    1754         {
    1755             if (!paVars[iVar].cchExp)
    1756                 continue;
    1757             memcpy(psz, paVars[iVar].pszExp, paVars[iVar].cchExp);
    1758             psz += paVars[iVar].cchExp;
    1759             *psz++ = ' ';
    1760             if (paVars[iVar].pszExp != paVars[iVar].pVar->value)
    1761                 free(paVars[iVar].pszExp);
    1762         }
    1763         if (psz != pszResult)
    1764             psz--;
    1765         *psz = '\0';
    1766         cchTotal = psz - pszResult;
     1776        assert(psz != pszResult);
     1777        assert(cchTotal == (size_t)(psz - pszResult));
     1778        psz[-1] = '\0';
     1779        cchTotal--;
     1780
    17671781        pVar = define_variable_vl(pszVarName, cchVarName, pszResult, cchTotal,
    17681782                                  0 /* take pszResult */ , o_local, 0 /* !recursive */);
     
    20302044     */
    20312045    if (pDefPath)
    2032         kbuild_apply_defpath(pDefPath, &pSource->value, &pSource->value_length, &pSource->value_alloc_len, 1 /* can free */);
     2046        kbuild_apply_defpath(pDefPath, &pSource->value, (unsigned int *)&pSource->value_length, &pSource->value_alloc_len, 1 /* can free */);
    20332047
    20342048    /*
Note: See TracChangeset for help on using the changeset viewer.

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