Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix memcpy() compiler warnings. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
7ae4b1a719c4a175a47e135dc00c9a84 |
User & Date: | drh 2019-08-20 19:16:52 |
Context
2019-08-21
| ||
08:52 | Replaced the redundant copy of the default CSP in skins/bootstrap/header.txt with "$default_csp", allowing the TH1 setup script to override the CSP as in all the other stock skins. (Bootstrap is the last stock skin to define a custom <head> element.) ... (check-in: 14ac2cac user: wyoung tags: trunk) | |
2019-08-20
| ||
19:16 | Fix memcpy() compiler warnings. ... (check-in: 7ae4b1a7 user: drh tags: trunk) | |
16:11 | Fix possible misaligned pointer to a 16-bit object. ... (check-in: f7c41be8 user: drh tags: trunk) | |
Changes
Changes to src/th.c.
︙ | ︙ | |||
200 201 202 203 204 205 206 207 208 209 210 211 212 213 | int nBuf; int nBufAlloc; }; typedef struct Buffer Buffer; static int thBufferWrite(Th_Interp *interp, Buffer *, const char *, int); static void thBufferInit(Buffer *); static void thBufferFree(Th_Interp *interp, Buffer *); /* ** Append nAdd bytes of content copied from zAdd to the end of buffer ** pBuffer. If there is not enough space currently allocated, resize ** the allocation to make space. */ static int thBufferWrite( | > > > > > > > > | 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | int nBuf; int nBufAlloc; }; typedef struct Buffer Buffer; static int thBufferWrite(Th_Interp *interp, Buffer *, const char *, int); static void thBufferInit(Buffer *); static void thBufferFree(Th_Interp *interp, Buffer *); /* ** This version of memcpy() allows the first are second argument to ** be NULL as long as the number of bytes to copy is zero. */ static void *th_memcpy(void *dest, const void *src, size_t n){ return n>0 ? memcpy(dest,src,n) : dest; } /* ** Append nAdd bytes of content copied from zAdd to the end of buffer ** pBuffer. If there is not enough space currently allocated, resize ** the allocation to make space. */ static int thBufferWrite( |
︙ | ︙ | |||
225 226 227 228 229 230 231 | if( nReq>pBuffer->nBufAlloc ){ char *zNew; int nNew; nNew = nReq*2; zNew = (char *)Th_Malloc(interp, nNew); | | | | 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 | if( nReq>pBuffer->nBufAlloc ){ char *zNew; int nNew; nNew = nReq*2; zNew = (char *)Th_Malloc(interp, nNew); th_memcpy(zNew, pBuffer->zBuf, pBuffer->nBuf); Th_Free(interp, pBuffer->zBuf); pBuffer->nBufAlloc = nNew; pBuffer->zBuf = zNew; } th_memcpy(&pBuffer->zBuf[pBuffer->nBuf], zAdd, nAdd); pBuffer->nBuf += nAdd; pBuffer->zBuf[pBuffer->nBuf] = '\0'; return TH_OK; } #define thBufferWrite(a,b,c,d) thBufferWrite(a,b,(const char *)c,d) |
︙ | ︙ | |||
839 840 841 842 843 844 845 | char **azElem = Th_Malloc(interp, sizeof(char*) * nCount + /* azElem */ sizeof(int) * nCount + /* anElem */ strbuf.nBuf /* space for list element strings */ ); anElem = (int *)&azElem[nCount]; zElem = (char *)&anElem[nCount]; | | | | 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 | char **azElem = Th_Malloc(interp, sizeof(char*) * nCount + /* azElem */ sizeof(int) * nCount + /* anElem */ strbuf.nBuf /* space for list element strings */ ); anElem = (int *)&azElem[nCount]; zElem = (char *)&anElem[nCount]; th_memcpy(anElem, lenbuf.zBuf, lenbuf.nBuf); th_memcpy(zElem, strbuf.zBuf, strbuf.nBuf); for(i=0; i<nCount;i++){ azElem[i] = zElem; zElem += (anElem[i] + 1); } *pazElem = azElem; *panElem = anElem; } |
︙ | ︙ | |||
1291 1292 1293 1294 1295 1296 1297 | Th_Free(interp, pValue->zData); pValue->zData = 0; } assert(zValue || nValue==0); pValue->zData = Th_Malloc(interp, nValue+1); pValue->zData[nValue] = '\0'; | | | 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 | Th_Free(interp, pValue->zData); pValue->zData = 0; } assert(zValue || nValue==0); pValue->zData = Th_Malloc(interp, nValue+1); pValue->zData[nValue] = '\0'; th_memcpy(pValue->zData, zValue, nValue); pValue->nData = nValue; return TH_OK; } /* ** Create a variable link so that accessing variable (zLocal, nLocal) is |
︙ | ︙ | |||
1410 1411 1412 1413 1414 1415 1416 | */ char *th_strdup(Th_Interp *interp, const char *z, int n){ char *zRes; if( n<0 ){ n = th_strlen(z); } zRes = Th_Malloc(interp, n+1); | | | 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 | */ char *th_strdup(Th_Interp *interp, const char *z, int n){ char *zRes; if( n<0 ){ n = th_strlen(z); } zRes = Th_Malloc(interp, n+1); th_memcpy(zRes, z, n); zRes[n] = '\0'; return zRes; } /* ** Argument zPre must be a nul-terminated string. Set the interpreter ** result to a string containing the contents of zPre, followed by |
︙ | ︙ | |||
1470 1471 1472 1473 1474 1475 1476 | if( n<0 ){ n = th_strlen(z); } if( z && n>0 ){ char *zResult; zResult = Th_Malloc(pInterp, n+1); | | | 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 | if( n<0 ){ n = th_strlen(z); } if( z && n>0 ){ char *zResult; zResult = Th_Malloc(pInterp, n+1); th_memcpy(zResult, z, n); zResult[n] = '\0'; pInterp->zResult = zResult; pInterp->nResult = n; } return TH_OK; } |
︙ | ︙ | |||
1773 1774 1775 1776 1777 1778 1779 | if( nElem<0 ){ nElem = th_strlen(zElem); } nNew = *pnStr + nElem; zNew = Th_Malloc(interp, nNew); | | | | 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 | if( nElem<0 ){ nElem = th_strlen(zElem); } nNew = *pnStr + nElem; zNew = Th_Malloc(interp, nNew); th_memcpy(zNew, *pzStr, *pnStr); th_memcpy(&zNew[*pnStr], zElem, nElem); Th_Free(interp, *pzStr); *pzStr = zNew; *pnStr = nNew; return TH_OK; } |
︙ | ︙ | |||
2333 2334 2335 2336 2337 2338 2339 | } if( pNew->pOp || pNew->nValue ){ if( pNew->nValue ){ /* A terminal. Copy the string value. */ assert( !pNew->pOp ); pNew->zValue = Th_Malloc(interp, pNew->nValue); | | | | 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 | } if( pNew->pOp || pNew->nValue ){ if( pNew->nValue ){ /* A terminal. Copy the string value. */ assert( !pNew->pOp ); pNew->zValue = Th_Malloc(interp, pNew->nValue); th_memcpy(pNew->zValue, z, pNew->nValue); i += pNew->nValue; } if( (nToken%16)==0 ){ /* Grow the apToken array. */ Expr **apTokenOld = apToken; apToken = Th_Malloc(interp, sizeof(Expr *)*(nToken+16)); th_memcpy(apToken, apTokenOld, sizeof(Expr *)*nToken); } /* Put the new token at the end of the apToken array */ apToken[nToken] = pNew; nToken++; }else{ Th_Free(interp, pNew); |
︙ | ︙ | |||
2511 2512 2513 2514 2515 2516 2517 | pRet = 0; } if( op>0 && !pRet ){ pRet = (Th_HashEntry *)Th_Malloc(interp, sizeof(Th_HashEntry) + nKey); pRet->zKey = (char *)&pRet[1]; pRet->nKey = nKey; | | | 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 | pRet = 0; } if( op>0 && !pRet ){ pRet = (Th_HashEntry *)Th_Malloc(interp, sizeof(Th_HashEntry) + nKey); pRet->zKey = (char *)&pRet[1]; pRet->nKey = nKey; th_memcpy(pRet->zKey, zKey, nKey); pRet->pNext = pHash->a[iKey]; pHash->a[iKey] = pRet; } return pRet; } |
︙ | ︙ |