/* * NAME: node->index() * DESCRIPTION: create an index record from a key and node pointer */ void n_index(btree *bt, unsigned char *key, unsigned long nnum, unsigned char *record, int *reclen) { if (bt == &bt->f.vol->cat) { /* force the key length to be 0x25 */ HFS_RECKEYLEN(record) = 0x25; memset(record + 1, 0, 0x25); memcpy(record + 1, key + 1, HFS_RECKEYLEN(key)); } else memcpy(record, key, HFS_RECKEYSKIP(key)); d_putl(HFS_RECDATA(record), nnum); if (reclen) *reclen = HFS_RECKEYSKIP(record) + 4; }
/* * NAME: node->index() * DESCRIPTION: create an index record from a key and node pointer */ void n_index(const node *np, byte *record, unsigned int *reclen) { const byte *key = HFS_NODEREC(*np, 0); if (np->bt == &np->bt->f.vol->cat) { /* force the key length to be 0x25 */ HFS_SETKEYLEN(record, 0x25); memset(record + 1, 0, 0x25); memcpy(record + 1, key + 1, HFS_RECKEYLEN(key)); } else memcpy(record, key, HFS_RECKEYSKIP(key)); d_putul(HFS_RECDATA(record), np->nnum); if (reclen) *reclen = HFS_RECKEYSKIP(record) + 4; }
/* * NAME: record->packextkey() * DESCRIPTION: pack an extents record key */ void r_packextkey(const ExtKeyRec *key, byte *pkey, int *len) { const byte *start = pkey; d_storesb(&pkey, key->xkrKeyLen); d_storesb(&pkey, key->xkrFkType); d_storeul(&pkey, key->xkrFNum); d_storeuw(&pkey, key->xkrFABN); if (len) *len = HFS_RECKEYSKIP(start); }
/* * NAME: record->packcatkey() * DESCRIPTION: pack a catalog record key */ void r_packcatkey(const CatKeyRec *key, byte *pkey, int *len) { const byte *start = pkey; d_storesb(&pkey, key->ckrKeyLen); d_storesb(&pkey, key->ckrResrv1); d_storeul(&pkey, key->ckrParID); d_storestr(&pkey, key->ckrCName, sizeof(key->ckrCName)); if (len) *len = HFS_RECKEYSKIP(start); }