Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Pad the 26 byte Zonefile header to 32 bytes so that the ZonefileIndex object is 8-byte aligned. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | zonefile |
Files: | files | file ages | folders |
SHA3-256: |
fdb6c0c5dc5a67ca16dfafc6e677f739 |
User & Date: | dan 2018-02-13 17:33:28.294 |
Context
2018-02-13
| ||
18:02 | Remove, for now, the "priority" column from the zonefile_files virtual table. (check-in: 8bf5154bc6 user: dan tags: zonefile) | |
17:33 | Pad the 26 byte Zonefile header to 32 bytes so that the ZonefileIndex object is 8-byte aligned. (check-in: fdb6c0c5dc user: dan tags: zonefile) | |
2018-02-12
| ||
20:04 | Add support for reading simple (no compression, no encryption) zonefile files. (check-in: dba42f0e1e user: dan tags: zonefile) | |
Changes
Changes to ext/zonefile/zonefile.c.
︙ | ︙ | |||
33 34 35 36 37 38 39 | # define ALWAYS(X) (X) # define NEVER(X) (X) #endif #endif /* SQLITE_AMALGAMATION */ #define ZONEFILE_MAGIC_NUMBER 0x464B3138 | | | 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | # define ALWAYS(X) (X) # define NEVER(X) (X) #endif #endif /* SQLITE_AMALGAMATION */ #define ZONEFILE_MAGIC_NUMBER 0x464B3138 #define ZONEFILE_SZ_HEADER 32 #define ZONEFILE_SZ_KEYOFFSETS_ENTRY 20 #define ZONEFILE_DEFAULT_MAXAUTOFRAMESIZE (64*1024) #define ZONEFILE_DEFAULT_ENCRYPTION 0 #define ZONEFILE_DEFAULT_COMPRESSION 0 |
︙ | ︙ | |||
205 206 207 208 209 210 211 212 213 | } static int zonefileGetParams( sqlite3_context *pCtx, /* Leave any error message here */ const char *zJson, /* JSON configuration parameter (or NULL) */ ZonefileWrite *p /* Populate this object before returning */ ){ memset(p, 0, sizeof(ZonefileWrite)); p->maxAutoFrameSize = ZONEFILE_DEFAULT_MAXAUTOFRAMESIZE; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 | } static int zonefileGetParams( sqlite3_context *pCtx, /* Leave any error message here */ const char *zJson, /* JSON configuration parameter (or NULL) */ ZonefileWrite *p /* Populate this object before returning */ ){ sqlite3 *db = sqlite3_context_db_handle(pCtx); sqlite3_stmt *pStmt = 0; char *zErr = 0; int rc = SQLITE_OK; int rc2; memset(p, 0, sizeof(ZonefileWrite)); p->maxAutoFrameSize = ZONEFILE_DEFAULT_MAXAUTOFRAMESIZE; rc = zonefilePrepare(db, &pStmt, &zErr,"SELECT key, value FROM json_each(?)"); while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){ const char *zKey = (const char*)sqlite3_column_text(pStmt, 0); int iVal = sqlite3_column_int(pStmt, 1); if( sqlite3_stricmp("maxAutoFrameSize", zKey)==0 ){ p->maxAutoFrameSize = iVal; }else if( sqlite3_stricmp("compressionTypeIndexData", zKey)==0 ){ p->compressionTypeIndexData = iVal; }else if( sqlite3_stricmp("compressionTypeContent", zKey)==0 ){ p->compressionTypeContent = iVal; }else if( sqlite3_stricmp("encryptionType", zKey)==0 ){ p->encryptionType = iVal; }else{ rc = SQLITE_ERROR; zErr = sqlite3_mprintf("unknown parameter name: \"%s\"", zKey); } } rc2 = sqlite3_finalize(pStmt); if( rc==SQLITE_OK ) rc = rc2; if( zErr ){ sqlite3_result_error(pCtx, zErr, -1); sqlite3_free(zErr); } return rc; } /* ** Check that there is room in buffer pBuf for at least nByte bytes more ** data. If not, attempt to allocate more space. If the allocation attempt ** fails, leave an error message in context pCtx and return SQLITE_ERROR. ** |
︙ | ︙ | |||
401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 | szFrame += nBlob; nKey++; } sqlite3_value_free(pPrev); pPrev = 0; /* Create the zonefile header in the in-memory buffer */ zonefilePut32(&aHdr[0], ZONEFILE_MAGIC_NUMBER); aHdr[4] = sWrite.compressionTypeIndexData; aHdr[5] = sWrite.compressionTypeContent; zonefilePut32(&aHdr[6], 0); /* Compression dictionary byte offset */ zonefilePut32(&aHdr[10], ZONEFILE_SZ_HEADER + sFrameIdx.n + sKeyIdx.n); zonefilePut32(&aHdr[14], nFrame); zonefilePut32(&aHdr[18], nKey); aHdr[22] = sWrite.encryptionType; aHdr[23] = 0; /* Encryption key index */ aHdr[24] = 0; /* extended header version */ aHdr[25] = 0; /* extended header size */ | > | | 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 | szFrame += nBlob; nKey++; } sqlite3_value_free(pPrev); pPrev = 0; /* Create the zonefile header in the in-memory buffer */ memset(aHdr, 0, ZONEFILE_SZ_HEADER); zonefilePut32(&aHdr[0], ZONEFILE_MAGIC_NUMBER); aHdr[4] = sWrite.compressionTypeIndexData; aHdr[5] = sWrite.compressionTypeContent; zonefilePut32(&aHdr[6], 0); /* Compression dictionary byte offset */ zonefilePut32(&aHdr[10], ZONEFILE_SZ_HEADER + sFrameIdx.n + sKeyIdx.n); zonefilePut32(&aHdr[14], nFrame); zonefilePut32(&aHdr[18], nKey); aHdr[22] = sWrite.encryptionType; aHdr[23] = 0; /* Encryption key index */ aHdr[24] = 0; /* extended header version */ aHdr[25] = 0; /* extended header size */ assert( ZONEFILE_SZ_HEADER>=26 ); rc = zonefileFileWrite(pFd, aHdr, ZONEFILE_SZ_HEADER); if( rc==SQLITE_OK ) rc = zonefileFileWrite(pFd, sFrameIdx.a, sFrameIdx.n); if( rc==SQLITE_OK ) rc = zonefileFileWrite(pFd, sKeyIdx.a, sKeyIdx.n); if( rc==SQLITE_OK ) rc = zonefileFileWrite(pFd, sFrames.a, sFrames.n); if( rc ){ zonefileCtxError(pCtx, "error writing file \"%s\" (fwrite())", zFile); |
︙ | ︙ |