| /* |
| * libhfs - library for reading and writing Macintosh HFS volumes |
| * Copyright (C) 1996-1998 Robert Leslie |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, |
| * MA 02110-1301, USA. |
| * |
| * $Id: node.c,v 1.9 1998/11/02 22:09:05 rob Exp $ |
| */ |
| |
| #include "config.h" |
| #include "libhfs.h" |
| #include "node.h" |
| #include "data.h" |
| #include "btree.h" |
| |
| /* |
| * NAME: node->search() |
| * DESCRIPTION: locate a record in a node, or the record it should follow |
| */ |
| int n_search(node *np, const byte *pkey) |
| { |
| const btree *bt = np->bt; |
| byte key1[HFS_MAX_KEYLEN], key2[HFS_MAX_KEYLEN]; |
| int i, comp = -1; |
| |
| bt->keyunpack(pkey, key2); |
| |
| for (i = np->nd.ndNRecs; i--; ) |
| { |
| const byte *rec; |
| |
| rec = HFS_NODEREC(*np, i); |
| |
| if (HFS_RECKEYLEN(rec) == 0) |
| continue; /* deleted record */ |
| |
| bt->keyunpack(rec, key1); |
| comp = bt->keycompare(key1, key2); |
| |
| if (comp <= 0) |
| break; |
| } |
| |
| np->rnum = i; |
| |
| return comp == 0; |
| } |