xref: /openbsd-src/gnu/llvm/lldb/source/Host/macosx/cfcpp/CFCData.cpp (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1dda28197Spatrick //===-- CFCData.cpp -------------------------------------------------------===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick 
9061da546Spatrick #include "CFCData.h"
10061da546Spatrick 
11061da546Spatrick // CFCData constructor
CFCData(CFDataRef data)12061da546Spatrick CFCData::CFCData(CFDataRef data) : CFCReleaser<CFDataRef>(data) {}
13061da546Spatrick 
14061da546Spatrick // CFCData copy constructor
15*f6aab3d8Srobert CFCData::CFCData(const CFCData &rhs) = default;
16061da546Spatrick 
17061da546Spatrick // CFCData copy constructor
operator =(const CFCData & rhs)18061da546Spatrick CFCData &CFCData::operator=(const CFCData &rhs)
19061da546Spatrick 
20061da546Spatrick {
21061da546Spatrick   if (this != &rhs)
22061da546Spatrick     *this = rhs;
23061da546Spatrick   return *this;
24061da546Spatrick }
25061da546Spatrick 
26061da546Spatrick // Destructor
27be691f3bSpatrick CFCData::~CFCData() = default;
28061da546Spatrick 
GetLength() const29061da546Spatrick CFIndex CFCData::GetLength() const {
30061da546Spatrick   CFDataRef data = get();
31061da546Spatrick   if (data)
32061da546Spatrick     return CFDataGetLength(data);
33061da546Spatrick   return 0;
34061da546Spatrick }
35061da546Spatrick 
GetBytePtr() const36061da546Spatrick const uint8_t *CFCData::GetBytePtr() const {
37061da546Spatrick   CFDataRef data = get();
38061da546Spatrick   if (data)
39061da546Spatrick     return CFDataGetBytePtr(data);
40061da546Spatrick   return NULL;
41061da546Spatrick }
42061da546Spatrick 
Serialize(CFPropertyListRef plist,CFPropertyListFormat format)43061da546Spatrick CFDataRef CFCData::Serialize(CFPropertyListRef plist,
44061da546Spatrick                              CFPropertyListFormat format) {
45061da546Spatrick   CFAllocatorRef alloc = kCFAllocatorDefault;
46061da546Spatrick   reset();
47061da546Spatrick   CFCReleaser<CFWriteStreamRef> stream(
48061da546Spatrick       ::CFWriteStreamCreateWithAllocatedBuffers(alloc, alloc));
49061da546Spatrick   ::CFWriteStreamOpen(stream.get());
50061da546Spatrick   CFIndex len =
51061da546Spatrick       ::CFPropertyListWriteToStream(plist, stream.get(), format, NULL);
52061da546Spatrick   if (len > 0)
53061da546Spatrick     reset((CFDataRef)::CFWriteStreamCopyProperty(stream.get(),
54061da546Spatrick                                                  kCFStreamPropertyDataWritten));
55061da546Spatrick   ::CFWriteStreamClose(stream.get());
56061da546Spatrick   return get();
57061da546Spatrick }
58