Home | History | Annotate | Download | only in libhfs_iso

Lines Matching refs:bt

37   btree *bt = np->bt;
44 if (np->nnum < 0 || (np->nnum > 0 && np->nnum >= bt->hdr.bthNNodes))
50 if (bt->map && ! BMTST(bt->map, np->nnum))
56 if (f_getblock(&bt->f, np->nnum, bp) < 0)
90 btree *bt = np->bt;
97 if (np->nnum && np->nnum >= bt->hdr.bthNNodes)
102 else if (bt->map && ! BMTST(bt->map, np->nnum))
130 if (f_putblock(&bt->f, np->nnum, bp) < 0)
140 int bt_readhdr(btree *bt)
147 bt->hdrnd.bt = bt;
148 bt->hdrnd.nnum = 0;
150 if (bt_getnode(&bt->hdrnd) < 0)
153 if (bt->hdrnd.nd.ndType != ndHdrNode ||
154 bt->hdrnd.nd.ndNRecs != 3 ||
155 bt->hdrnd.roff[0] != 0x00e ||
156 bt->hdrnd.roff[1] != 0x078 ||
157 bt->hdrnd.roff[2] != 0x0f8 ||
158 bt->hdrnd.roff[3] != 0x1f8)
166 ptr = HFS_NODEREC(bt->hdrnd, 0);
168 d_fetchw(&ptr, (short *) &bt->hdr.bthDepth);
169 d_fetchl(&ptr, (long *) &bt->hdr.bthRoot);
170 d_fetchl(&ptr, (long *) &bt->hdr.bthNRecs);
171 d_fetchl(&ptr, (long *) &bt->hdr.bthFNode);
172 d_fetchl(&ptr, (long *) &bt->hdr.bthLNode);
173 d_fetchw(&ptr, (short *) &bt->hdr.bthNodeSize);
174 d_fetchw(&ptr, (short *) &bt->hdr.bthKeyLen);
175 d_fetchl(&ptr, (long *) &bt->hdr.bthNNodes);
176 d_fetchl(&ptr, (long *) &bt->hdr.bthFree);
179 d_fetchb(&ptr, (char *) &bt->hdr.bthResv[i]);
181 if (bt->hdr.bthNodeSize != HFS_BLOCKSZ)
188 /* don't set bt->map until we're done, since getnode() checks it */
197 memcpy(map, HFS_NODEREC(bt->hdrnd, 2), HFS_MAP1SZ);
198 bt->mapsz = HFS_MAP1SZ;
202 nnum = bt->hdrnd.nd.ndFLink;
209 n.bt = bt;
228 newmap = REALLOC(map, char, bt->mapsz + HFS_MAPXSZ);
237 memcpy(map + bt->mapsz, HFS_NODEREC(n, 0), HFS_MAPXSZ);
238 bt->mapsz += HFS_MAPXSZ;
243 bt->map = map;
252 int bt_writehdr(btree *bt)
259 if (bt->hdrnd.bt != bt ||
260 bt->hdrnd.nnum != 0 ||
261 bt->hdrnd.nd.ndType != ndHdrNode ||
262 bt->hdrnd.nd.ndNRecs != 3)
265 ptr = HFS_NODEREC(bt->hdrnd, 0);
267 d_storew(&ptr, bt->hdr.bthDepth);
268 d_storel(&ptr, bt->hdr.bthRoot);
269 d_storel(&ptr, bt->hdr.bthNRecs);
270 d_storel(&ptr, bt->hdr.bthFNode);
271 d_storel(&ptr, bt->hdr.bthLNode);
272 d_storew(&ptr, bt->hdr.bthNodeSize);
273 d_storew(&ptr, bt->hdr.bthKeyLen);
274 d_storel(&ptr, bt->hdr.bthNNodes);
275 d_storel(&ptr, bt->hdr.bthFree);
278 d_storeb(&ptr, bt->hdr.bthResv[i]);
280 memcpy(HFS_NODEREC(bt->hdrnd, 2), bt->map, HFS_MAP1SZ);
282 if (bt_putnode(&bt->hdrnd) < 0)
285 map = bt->map + HFS_MAP1SZ;
286 mapsz = bt->mapsz - HFS_MAP1SZ;
288 nnum = bt->hdrnd.nd.ndFLink;
300 n.bt = bt;
326 bt->flags &= ~HFS_UPDATE_BTHDR;
337 int bt_space(btree *bt, unsigned int nrecs)
342 nnodes = nrecs * (bt->hdr.bthDepth + 1);
344 if (nnodes <= bt->hdr.bthFree)
349 if (bt != &bt->f.vol->ext)
351 if (bt_space(&bt->f.vol->ext, 1) < 0)
355 space = f_alloc(&bt->f);
359 nnodes = space * (bt->f.vol->mdb.drAlBlkSiz / bt->hdr.bthNodeSize);
361 bt->hdr.bthNNodes += nnodes;
362 bt->hdr.bthFree += nnodes;
364 bt->flags |= HFS_UPDATE_BTHDR;
366 bt->f.vol->flags |= HFS_UPDATE_ALTMDB;
368 while (bt->hdr.bthNNodes > bt->mapsz * 8)
375 newmap = REALLOC(bt->map, char, bt->mapsz + HFS_MAPXSZ);
382 memset(newmap + bt->mapsz, 0, HFS_MAPXSZ);
384 bt->map = newmap;
385 bt->mapsz += HFS_MAPXSZ;
387 n_init(&mapnd, bt, ndMapNode, 0);
393 if (bt->hdrnd.nd.ndFLink == 0)
395 bt->hdrnd.nd.ndFLink = mapnd.nnum;
402 n.bt = bt;
403 n.nnum = bt->hdrnd.nd.ndFLink;
456 child.bt = np->bt;
465 n_index(np->bt, HFS_NODEREC(child, 0), child.nnum, rec, 0);
485 int bt_insert(btree *bt, unsigned char *record, int reclen)
489 if (bt->hdr.bthRoot == 0)
493 n_init(&root, bt, ndLeafNode, 1);
498 bt->hdr.bthDepth = 1;
499 bt->hdr.bthRoot = root.nnum;
500 bt->hdr.bthFNode = root.nnum;
501 bt->hdr.bthLNode = root.nnum;
503 bt->flags |= HFS_UPDATE_BTHDR;
507 root.bt = bt;
508 root.nnum = bt->hdr.bthRoot;
524 n_index(bt, HFS_NODEREC(root, 0), root.nnum, oroot, &orootlen);
526 n_init(&root, bt, ndIndxNode, root.nd.ndNHeight + 1);
530 ++bt->hdr.bthDepth;
531 bt->hdr.bthRoot = root.nnum;
533 bt->flags |= HFS_UPDATE_BTHDR;
547 ++bt->hdr.bthNRecs;
548 bt->flags |= HFS_UPDATE_BTHDR;
576 child.bt = np->bt;
592 n_index(np->bt, HFS_NODEREC(*np, 0), np->nnum, record, 0);
620 int bt_delete(btree *bt, unsigned char *key)
626 root.bt = bt;
627 root.nnum = bt->hdr.bthRoot;
639 if (bt->hdr.bthDepth > 1 && root.nd.ndNRecs == 1)
647 --bt->hdr.bthDepth;
648 bt->hdr.bthRoot = d_getl(HFS_RECDATA(rec));
652 else if (bt->hdr.bthDepth == 1 && root.nd.ndNRecs == 0)
656 bt->hdr.bthDepth = 0;
657 bt->hdr.bthRoot = 0;
658 bt->hdr.bthFNode = 0;
659 bt->hdr.bthLNode = 0;
664 --bt->hdr.bthNRecs;
665 bt->flags |= HFS_UPDATE_BTHDR;
674 int bt_search(btree *bt, unsigned char *key, node *np)
676 np->bt = bt;
677 np->nnum = bt->hdr.bthRoot;