1/*
2 * Copyright (c) 2000-2004 Apple Computer, Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24
25/*
26 *  KCExceptions.h
27 */
28#ifndef _SECURITY_KCEXCEPTIONS_H_
29#define _SECURITY_KCEXCEPTIONS_H_
30
31#include <security_utilities/errors.h>
32#include <SecBase.h>
33#ifdef lock
34#undef lock
35#endif
36//#include <security_cdsa_utilities/utilities.h>
37
38#ifdef check
39#undef check
40#endif
41
42namespace Security
43{
44
45namespace KeychainCore
46{
47
48//
49// Helpers for memory pointer validation
50//
51
52/*	remove RequiredParam when cdsa does namespaces
53template <class T>
54inline T &Required(T *ptr,OSStatus err = errSecParam)
55{
56    return Required(ptr,err);
57}
58*/
59
60template <class T>
61inline void KCThrowIfMemFail_(const T *ptr)
62{
63    if (ptr==NULL)
64		MacOSError::throwMe(errSecAllocate);
65}
66
67inline void KCThrowIf_(OSStatus theErr)
68{
69	// will also work for OSErr
70    if (theErr!=errSecSuccess)
71        MacOSError::throwMe(theErr);
72}
73
74inline void KCThrowIf_(bool test,OSStatus theErr)
75{
76	// will also work for OSErr
77    if (test)
78        MacOSError::throwMe(theErr);
79}
80
81inline void KCThrowParamErrIf_(bool test)
82{
83    if (test)
84        MacOSError::throwMe(errSecParam);
85}
86
87inline void KCUnimplemented_()
88{
89	MacOSError::throwMe(errSecUnimplemented);
90}
91
92} // end namespace KeychainCore
93
94} // end namespace Security
95
96#endif /* !_SECURITY_KCEXCEPTIONS_H_ */
97