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)12061da546SpatrickCFCData::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)18061da546SpatrickCFCData &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() const29061da546SpatrickCFIndex CFCData::GetLength() const { 30061da546Spatrick CFDataRef data = get(); 31061da546Spatrick if (data) 32061da546Spatrick return CFDataGetLength(data); 33061da546Spatrick return 0; 34061da546Spatrick } 35061da546Spatrick GetBytePtr() const36061da546Spatrickconst 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)43061da546SpatrickCFDataRef 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