130fdc8d8SChris Lattner //===-- CFBundle.cpp --------------------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 630fdc8d8SChris Lattner // 730fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 830fdc8d8SChris Lattner // 930fdc8d8SChris Lattner // Created by Greg Clayton on 1/16/08. 1030fdc8d8SChris Lattner // 1130fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 1230fdc8d8SChris Lattner 1330fdc8d8SChris Lattner #include "CFBundle.h" 1430fdc8d8SChris Lattner #include "CFString.h" 1530fdc8d8SChris Lattner 1630fdc8d8SChris Lattner // CFBundle constructor CFBundle(const char * path)17b9c1b51eSKate StoneCFBundle::CFBundle(const char *path) 18b9c1b51eSKate Stone : CFReleaser<CFBundleRef>(), m_bundle_url() { 1930fdc8d8SChris Lattner if (path && path[0]) 2030fdc8d8SChris Lattner SetPath(path); 2130fdc8d8SChris Lattner } 2230fdc8d8SChris Lattner 2330fdc8d8SChris Lattner // CFBundle copy constructor 24*24f9a2f5SShafik Yaghmour CFBundle::CFBundle(const CFBundle &rhs) = default; 2530fdc8d8SChris Lattner 2630fdc8d8SChris Lattner // CFBundle copy constructor operator =(const CFBundle & rhs)27b9c1b51eSKate StoneCFBundle &CFBundle::operator=(const CFBundle &rhs) { 2802f74b08SGreg Clayton if (this != &rhs) 2930fdc8d8SChris Lattner *this = rhs; 3030fdc8d8SChris Lattner return *this; 3130fdc8d8SChris Lattner } 3230fdc8d8SChris Lattner 3330fdc8d8SChris Lattner // Destructor 34*24f9a2f5SShafik Yaghmour CFBundle::~CFBundle() = default; 3530fdc8d8SChris Lattner 3630fdc8d8SChris Lattner // Set the path for a bundle by supplying a SetPath(const char * path)37b9c1b51eSKate Stonebool CFBundle::SetPath(const char *path) { 3830fdc8d8SChris Lattner CFAllocatorRef alloc = kCFAllocatorDefault; 3930fdc8d8SChris Lattner // Release our old bundle and ULR 4030fdc8d8SChris Lattner reset(); // This class is a CFReleaser<CFBundleRef> 4130fdc8d8SChris Lattner m_bundle_url.reset(); 4230fdc8d8SChris Lattner // Make a CFStringRef from the supplied path 4330fdc8d8SChris Lattner CFString cf_path; 4430fdc8d8SChris Lattner cf_path.SetFileSystemRepresentation(path); 45b9c1b51eSKate Stone if (cf_path.get()) { 4630fdc8d8SChris Lattner // Make our Bundle URL 47b9c1b51eSKate Stone m_bundle_url.reset(::CFURLCreateWithFileSystemPath( 48b9c1b51eSKate Stone alloc, cf_path.get(), kCFURLPOSIXPathStyle, true)); 49b9c1b51eSKate Stone if (m_bundle_url.get()) { 5030fdc8d8SChris Lattner reset(::CFBundleCreate(alloc, m_bundle_url.get())); 5130fdc8d8SChris Lattner } 5230fdc8d8SChris Lattner } 5330fdc8d8SChris Lattner return get() != NULL; 5430fdc8d8SChris Lattner } 5530fdc8d8SChris Lattner GetIdentifier() const56b9c1b51eSKate StoneCFStringRef CFBundle::GetIdentifier() const { 5730fdc8d8SChris Lattner CFBundleRef bundle = get(); 5830fdc8d8SChris Lattner if (bundle != NULL) 5930fdc8d8SChris Lattner return ::CFBundleGetIdentifier(bundle); 6030fdc8d8SChris Lattner return NULL; 6130fdc8d8SChris Lattner } 6248baf7a7SGreg Clayton CopyExecutableURL() const63b9c1b51eSKate StoneCFURLRef CFBundle::CopyExecutableURL() const { 6448baf7a7SGreg Clayton CFBundleRef bundle = get(); 6548baf7a7SGreg Clayton if (bundle != NULL) 6648baf7a7SGreg Clayton return CFBundleCopyExecutableURL(bundle); 6748baf7a7SGreg Clayton return NULL; 6848baf7a7SGreg Clayton } 69