CFBundle.cpp revision 355940
1//===-- CFBundle.cpp --------------------------------------------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// Created by Greg Clayton on 1/16/08. 10// 11//===----------------------------------------------------------------------===// 12 13#include "CFBundle.h" 14#include "CFString.h" 15 16// CFBundle constructor 17CFBundle::CFBundle(const char *path) 18 : CFReleaser<CFBundleRef>(), m_bundle_url() { 19 if (path && path[0]) 20 SetPath(path); 21} 22 23// CFBundle copy constructor 24CFBundle::CFBundle(const CFBundle &rhs) 25 : CFReleaser<CFBundleRef>(rhs), m_bundle_url(rhs.m_bundle_url) {} 26 27// CFBundle copy constructor 28CFBundle &CFBundle::operator=(const CFBundle &rhs) { 29 *this = rhs; 30 return *this; 31} 32 33// Destructor 34CFBundle::~CFBundle() {} 35 36// Set the path for a bundle by supplying a 37bool CFBundle::SetPath(const char *path) { 38 CFAllocatorRef alloc = kCFAllocatorDefault; 39 // Release our old bundle and ULR 40 reset(); // This class is a CFReleaser<CFBundleRef> 41 m_bundle_url.reset(); 42 // Make a CFStringRef from the supplied path 43 CFString cf_path; 44 cf_path.SetFileSystemRepresentation(path); 45 if (cf_path.get()) { 46 // Make our Bundle URL 47 m_bundle_url.reset(::CFURLCreateWithFileSystemPath( 48 alloc, cf_path.get(), kCFURLPOSIXPathStyle, true)); 49 if (m_bundle_url.get()) { 50 reset(::CFBundleCreate(alloc, m_bundle_url.get())); 51 } 52 } 53 return get() != NULL; 54} 55 56CFStringRef CFBundle::GetIdentifier() const { 57 CFBundleRef bundle = get(); 58 if (bundle != NULL) 59 return ::CFBundleGetIdentifier(bundle); 60 return NULL; 61} 62 63CFURLRef CFBundle::CopyExecutableURL() const { 64 CFBundleRef bundle = get(); 65 if (bundle != NULL) 66 return CFBundleCopyExecutableURL(bundle); 67 return NULL; 68} 69