//===-- CFCBundle.cpp -------------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "CFCBundle.h" #include "CFCString.h" //---------------------------------------------------------------------- // CFCBundle constructor //---------------------------------------------------------------------- CFCBundle::CFCBundle(const char *path) : CFCReleaser() { if (path && path[0]) SetPath(path); } CFCBundle::CFCBundle(CFURLRef url) : CFCReleaser(url ? CFBundleCreate(NULL, url) : NULL) { } //---------------------------------------------------------------------- // Destructor //---------------------------------------------------------------------- CFCBundle::~CFCBundle() { } //---------------------------------------------------------------------- // Set the path for a bundle by supplying a //---------------------------------------------------------------------- bool CFCBundle::SetPath (const char *path) { CFAllocatorRef alloc = kCFAllocatorDefault; // Release our old bundle and URL reset(); // Make a CFStringRef from the supplied path CFCString cf_path; cf_path.SetFileSystemRepresentation(path); if (cf_path.get()) { // Make our Bundle URL CFCReleaser bundle_url (::CFURLCreateWithFileSystemPath (alloc, cf_path.get(), kCFURLPOSIXPathStyle, true)); if (bundle_url.get()) reset (::CFBundleCreate (alloc, bundle_url.get())); } return get() != NULL; } bool CFCBundle::GetPath (char *dst, size_t dst_len) { CFBundleRef bundle = get(); if (bundle) { CFCReleaser bundle_url (CFBundleCopyBundleURL (bundle)); if (bundle_url.get()) { Boolean resolveAgainstBase = 0; return ::CFURLGetFileSystemRepresentation (bundle_url.get(), resolveAgainstBase, (UInt8 *)dst, dst_len) != 0; } } return false; } CFStringRef CFCBundle::GetIdentifier () const { CFBundleRef bundle = get(); if (bundle != NULL) return ::CFBundleGetIdentifier (bundle); return NULL; } CFTypeRef CFCBundle::GetValueForInfoDictionaryKey(CFStringRef key) const { CFBundleRef bundle = get(); if (bundle != NULL) return ::CFBundleGetValueForInfoDictionaryKey(bundle, key); return NULL; } CFURLRef CFCBundle::CopyExecutableURL () const { CFBundleRef bundle = get(); if (bundle != NULL) return CFBundleCopyExecutableURL(bundle); return NULL; }