1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef scoped_ptrs_util_h__
8 #define scoped_ptrs_util_h__
11 #include "pkcs11uri.h"
15 void operator()(SECAlgorithmID
* id
) { SECOID_DestroyAlgorithmID(id
, true); }
16 void operator()(SECItem
* item
) { SECITEM_FreeItem(item
, true); }
17 void operator()(PK11URI
* uri
) { PK11URI_DestroyURI(uri
); }
18 void operator()(PLArenaPool
* arena
) { PORT_FreeArena(arena
, PR_FALSE
); }
22 struct ScopedMaybeDelete
{
23 void operator()(T
* ptr
) {
31 #define SCOPED(x) typedef std::unique_ptr<x, ScopedMaybeDelete<x> > Scoped##x
33 SCOPED(SECAlgorithmID
);
40 struct StackSECItem
: public SECItem
{
41 StackSECItem() : SECItem({siBuffer
, nullptr, 0}) {}
42 ~StackSECItem() { SECITEM_FreeItem(this, PR_FALSE
); }
45 #endif // scoped_ptrs_util_h__