]>
git.saurik.com Git - apple/boot.git/blob - gen/libsaio/cache.c
2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7 * Reserved. This file contains Original Code and/or Modifications of
8 * Original Code as defined in and that are subject to the Apple Public
9 * Source License Version 1.1 (the "License"). You may not use this file
10 * except in compliance with the License. Please obtain a copy of the
11 * License at http://www.apple.com/publicsource and read it before using
14 * The Original Code and all software distributed under the License are
15 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the
19 * License for the specific language governing rights and limitations
22 * @APPLE_LICENSE_HEADER_END@
35 item_size
+= sizeof(item_t
);
36 cp
= (cache_t
*)malloc(sizeof(cache_t
) + nitems
* item_size
);
38 cp
->item_size
= item_size
;
43 * Either find an item in the cache, or find where it should go.
44 * Returns 1 if found, 0 if not found.
45 * This function assumes that if you find an empty slot, you will use it;
46 * therefore, empty slots returned are marked valid.
58 for(i
=j
=0, iip
= min_p
= (item_t
*)cp
->storage
; i
< cp
->nitems
; i
++) {
59 if (iip
->referenced
&& (iip
->key1
== key1
) && (iip
->key2
== key2
)) {
61 if (iip
->referenced
< 65535)
65 if (iip
->referenced
< min_p
->referenced
) {
69 iip
= (item_t
*)((char *)iip
+ cp
->item_size
);
72 min_p
->referenced
= 1;
90 for(i
=0, ip
= (item_t
*)cp
->storage
; i
< cp
->nitems
; i
++) {
92 ip
= (item_t
*)((char *)ip
+ cp
->item_size
);