]>
git.saurik.com Git - apple/security.git/blob - cdsa/cdsa_utilities/cssmerrno.cpp
2 * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved.
4 * The contents of this file constitute Original Code as defined in and are
5 * subject to the Apple Public Source License Version 1.2 (the 'License').
6 * You may not use this file except in compliance with the License. Please obtain
7 * a copy of the License at http://www.apple.com/publicsource and read it before
10 * This Original Code and all software distributed under the License are
11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
15 * specific language governing rights and limitations under the License.
20 // cssmerrno - number-to-string translation for CSSM error codes
22 #include <Security/cssmerrno.h>
23 #include <Security/SecBase.h>
24 #include <Security/Authorization.h>
25 #include <Security/globalizer.h>
34 // The compiled database of error codes
36 struct ErrorMap
: public map
<CSSM_RETURN
, const char *> {
39 static ModuleNexus
<ErrorMap
> errorMap
;
46 #include "errorcodes.gen" // include generated error tables
50 // Create the error map (the first time)
54 for (unsigned n
= 0; n
< sizeof(errorList
) / sizeof(errorList
[0]); n
++)
55 (*this)[errorList
[n
].error
] = errorList
[n
].name
;
60 // A perror-like form usable from C (and C++)
63 void cssmPerror(const char *how
, CSSM_RETURN error
)
66 fprintf(stderr
, "%s: %s\n", how
, cssmErrorString(error
).c_str());
68 fprintf(stderr
, "%s\n", cssmErrorString(error
).c_str());
73 // Produce a diagnostic string from a CSSM error number or exception.
74 // Small numbers are tried as convertible errors first.
75 // Unknown errors are output numerically with a note.
77 string
cssmErrorString(CSSM_RETURN error
)
79 if (error
== CSSM_OK
) {
81 } else if (error
>= errSecErrnoBase
&& error
<= errSecErrnoLimit
) {
82 return string("UNIX[") + strerror(error
- errSecErrnoBase
) + "]";
83 } else if (error
> 0 &&
84 int(error
) < int(sizeof(convErrorList
) / sizeof(convErrorList
[0])) &&
85 convErrorList
[error
]) {
86 return string("COMMON[") + convErrorList
[error
] + "]";
88 ErrorMap::const_iterator it
= errorMap().find(error
);
89 if (it
== errorMap().end()) {
91 snprintf(msg
, sizeof(msg
), "[UNKNOWN:0x%lx=%ld]", error
, error
);
99 string
cssmErrorString(const CssmCommonError
&error
)
100 { return cssmErrorString(error
.cssmError()); }
102 } // end namespace Security