Changeset 1924 in kBuild
- Timestamp:
- Oct 24, 2008 2:41:34 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/kbuild.c
r1923 r1924 354 354 */ 355 355 static void 356 kbuild_apply_defpath(struct variable *pDefPath, char **ppsz, int *pcch, int *pcchAlloc, int fCanFree)356 kbuild_apply_defpath(struct variable *pDefPath, char **ppsz, unsigned int *pcch, int *pcchAlloc, int fCanFree) 357 357 { 358 358 const char *pszIterator; … … 643 643 struct variable *pVar = kbuild_lookup_variable_n(pszName, cchName); 644 644 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); 646 646 return pVar; 647 647 } … … 661 661 struct variable *pVar = kbuild_lookup_variable(pszName); 662 662 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); 664 664 return pVar; 665 665 } … … 1530 1530 struct variable *pVar; 1531 1531 unsigned iSdk, iSdkEnd; 1532 int cVars, iVar , iVarEnd;1532 int cVars, iVar; 1533 1533 size_t cchTotal, cchBuf; 1534 1534 char *pszResult, *pszBuf, *psz, *psz2, *psz3; … … 1536 1536 { 1537 1537 struct variable *pVar; 1538 intcchExp;1538 unsigned int cchExp; 1539 1539 char *pszExp; 1540 1540 } *paVars; … … 1559 1559 /* 1560 1560 * Get the variables. 1561 * 1562 * The compiler will get a heart attack when it sees this code ... ;-) 1561 1563 */ 1562 1564 cVars = 12 * (pSdks->c + 5); … … 1564 1566 1565 1567 iVar = 0; 1568 cchTotal = 0; 1566 1569 1567 1570 #define ADD_VAR(pVar) do { my_memcpy(psz, (pVar)->value, (pVar)->value_length); psz += (pVar)->value_length; } while (0) … … 1569 1572 #define ADD_CSTR(pszStr) do { my_memcpy(psz, pszStr, sizeof(pszStr) - 1); psz += sizeof(pszStr) - 1; } while (0) 1570 1573 #define ADD_CH(ch) do { *psz++ = (ch); } while (0) 1571 # 1574 #define DO_VAR_LOOKUP() \ 1572 1575 do { \ 1573 1576 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 } \ 1576 1607 } while (0) 1577 1608 #define DO_SINGLE_PSZ3_VARIATION() \ … … 1707 1738 free(pszBuf); 1708 1739 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) 1714 1747 pVar = define_variable_vl(pszVarName, cchVarName, "", 0, 1715 1748 1 /* duplicate value */ , o_local, 0 /* !recursive */); 1716 1749 else 1717 1750 { 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) 1724 1753 { 1725 if (!paVars[iVar].pVar)1754 for (iVar = 0; iVar < cVars; iVar++) 1726 1755 { 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); 1729 1761 } 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) 1732 1767 { 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); 1735 1773 } 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 1746 1775 } 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 1767 1781 pVar = define_variable_vl(pszVarName, cchVarName, pszResult, cchTotal, 1768 1782 0 /* take pszResult */ , o_local, 0 /* !recursive */); … … 2030 2044 */ 2031 2045 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 */); 2033 2047 2034 2048 /*
Note:
See TracChangeset
for help on using the changeset viewer.