Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Fix memcpy() compiler warnings. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
7ae4b1a719c4a175a47e135dc00c9a84 |
| User & Date: | drh 2019-08-20 19:16:52.687 |
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: 14ac2cacdd user: wyoung tags: trunk) | |
|
2019-08-20
| ||
| 19:16 | Fix memcpy() compiler warnings. ... (check-in: 7ae4b1a719 user: drh tags: trunk) | |
| 16:11 | Fix possible misaligned pointer to a 16-bit object. ... (check-in: f7c41be825 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;
}
|
| ︙ | ︙ |