Merge pull request #10 from gunyarakun/fix-invalid-return
[cocotron.git] / Security / SecKeychainSearch.m
blobb57cf94aea81fc90da8a42f7913a43cbf22873bd
1 //
2 //  SecKeychainSearch.m
3 //  Security
4 //
5 //  Created by Christopher Lloyd on 2/12/10.
6 //  Copyright 2010 __MyCompanyName__. All rights reserved.
7 //
9 #import "SecKeychainSearch.h"
10 #import "SecKeychain.h"
12 @implementation SecKeychainSearch
15 -initWithKeychainOrArray:(CFTypeRef)keychainOrArray itemClass:(SecItemClass)itemClass attributeList:(const SecKeychainAttributeList *)attributeList {
16    if(keychainOrArray==NULL)
17     keychainOrArray=[SecKeychain defaultUserKeychain];
18     
19    if(![(id)keychainOrArray isKindOfClass:[NSArray class]])
20     keychainOrArray=[NSArray arrayWithObject:(id)keychainOrArray];
21    
22    _array=(CFArrayRef)CFRetain(keychainOrArray);
23    _itemClass=itemClass;
24    _attributeList=SecCopyAttributeList(attributeList);
26    _arrayCursor=0;
27    _keychainCursor=nil;
28    return self;
31 -(void)dealloc {
32    CFRelease(_array);
33    SecFreeAttributeList(_attributeList);   
34    [_keychainCursor release];
35    [super dealloc];
38 -(SecKeychainItemRef)copyNextItem {
39    ("%s %d",__FUNCTION__,__LINE__);
40   
41   while(_arrayCursor<CFArrayGetCount(_array)){
42    SecKeychainRef keychain=(id)CFArrayGetValueAtIndex(_array,_arrayCursor);
43    ("%s %d",__FUNCTION__,__LINE__);
44    
45    if(_keychainCursor==nil)
46     _keychainCursor=[keychain createCursorForItemClass:_itemClass];
47    ("%s %d",__FUNCTION__,__LINE__);
48     
49    SecKeychainItemRef check=nil;
50     
51    if(_keychainCursor!=nil)
52     check=[keychain createNextItemAtCursor:_keychainCursor attributeList:_attributeList];
53     
54    if(check!=nil)
55     return check;
56     
57    _arrayCursor++;
58    [_keychainCursor release];
59    _keychainCursor=nil;
60   }
61    ("%s %d",__FUNCTION__,__LINE__);
62    return nil;
65 @end