1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CRYPTO_SCOPED_NSS_TYPES_H_
6 #define CRYPTO_SCOPED_NSS_TYPES_H_
13 #include "base/memory/scoped_ptr.h"
17 template <typename Type
, void (*Destroyer
)(Type
*)>
19 void operator()(Type
* ptr
) const {
25 template <typename Type
, void (*Destroyer
)(Type
*, PRBool
), PRBool freeit
>
26 struct NSSDestroyer1
{
27 void operator()(Type
* ptr
) const {
29 Destroyer(ptr
, freeit
);
33 // Define some convenient scopers around NSS pointers.
34 typedef scoped_ptr_malloc
<
35 PK11Context
, NSSDestroyer1
<PK11Context
,
37 PR_TRUE
> > ScopedPK11Context
;
38 typedef scoped_ptr_malloc
<
39 PK11SlotInfo
, NSSDestroyer
<PK11SlotInfo
, PK11_FreeSlot
> > ScopedPK11Slot
;
40 typedef scoped_ptr_malloc
<
41 PK11SymKey
, NSSDestroyer
<PK11SymKey
, PK11_FreeSymKey
> > ScopedPK11SymKey
;
42 typedef scoped_ptr_malloc
<
43 SECKEYPublicKey
, NSSDestroyer
<SECKEYPublicKey
, SECKEY_DestroyPublicKey
> >
44 ScopedSECKEYPublicKey
;
45 typedef scoped_ptr_malloc
<
46 SECKEYPrivateKey
, NSSDestroyer
<SECKEYPrivateKey
, SECKEY_DestroyPrivateKey
> >
47 ScopedSECKEYPrivateKey
;
48 typedef scoped_ptr_malloc
<
49 SECAlgorithmID
, NSSDestroyer1
<SECAlgorithmID
,
50 SECOID_DestroyAlgorithmID
,
51 PR_TRUE
> > ScopedSECAlgorithmID
;
52 typedef scoped_ptr_malloc
<
53 SECItem
, NSSDestroyer1
<SECItem
,
55 PR_TRUE
> > ScopedSECItem
;
56 typedef scoped_ptr_malloc
<
57 PLArenaPool
, NSSDestroyer1
<PLArenaPool
,
59 PR_FALSE
> > ScopedPLArenaPool
;
63 #endif // CRYPTO_SCOPED_NSS_TYPES_H_