124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- CFBundle.cpp --------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Created by Greg Clayton on 1/16/08. 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "CFBundle.h" 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "CFString.h" 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CFBundle constructor 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFBundle::CFBundle(const char *path) : 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CFReleaser<CFBundleRef>(), 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_bundle_url() 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (path && path[0]) 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetPath(path); 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CFBundle copy constructor 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFBundle::CFBundle(const CFBundle& rhs) : 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CFReleaser<CFBundleRef>(rhs), 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_bundle_url(rhs.m_bundle_url) 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CFBundle copy constructor 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFBundle& 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFBundle::operator=(const CFBundle& rhs) 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner *this = rhs; 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Destructor 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFBundle::~CFBundle() 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Set the path for a bundle by supplying a 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFBundle::SetPath (const char *path) 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CFAllocatorRef alloc = kCFAllocatorDefault; 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Release our old bundle and ULR 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner reset(); // This class is a CFReleaser<CFBundleRef> 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_bundle_url.reset(); 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Make a CFStringRef from the supplied path 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CFString cf_path; 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner cf_path.SetFileSystemRepresentation(path); 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (cf_path.get()) 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Make our Bundle URL 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_bundle_url.reset (::CFURLCreateWithFileSystemPath (alloc, cf_path.get(), kCFURLPOSIXPathStyle, true)); 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (m_bundle_url.get()) 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner reset (::CFBundleCreate (alloc, m_bundle_url.get())); 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return get() != NULL; 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFStringRef 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCFBundle::GetIdentifier () const 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CFBundleRef bundle = get(); 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (bundle != NULL) 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return ::CFBundleGetIdentifier (bundle); 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return NULL; 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 88a5c92b6c0af7b68ae999d9efd87a060255aa7a37Greg Clayton 89a5c92b6c0af7b68ae999d9efd87a060255aa7a37Greg Clayton 90a5c92b6c0af7b68ae999d9efd87a060255aa7a37Greg ClaytonCFURLRef 91a5c92b6c0af7b68ae999d9efd87a060255aa7a37Greg ClaytonCFBundle::CopyExecutableURL () const 92a5c92b6c0af7b68ae999d9efd87a060255aa7a37Greg Clayton{ 93a5c92b6c0af7b68ae999d9efd87a060255aa7a37Greg Clayton CFBundleRef bundle = get(); 94a5c92b6c0af7b68ae999d9efd87a060255aa7a37Greg Clayton if (bundle != NULL) 95a5c92b6c0af7b68ae999d9efd87a060255aa7a37Greg Clayton return CFBundleCopyExecutableURL(bundle); 96a5c92b6c0af7b68ae999d9efd87a060255aa7a37Greg Clayton return NULL; 97a5c92b6c0af7b68ae999d9efd87a060255aa7a37Greg Clayton} 98