| //===-- 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<CFBundleRef>() { | |
| if (path && path[0]) | |
| SetPath(path); | |
| } | |
| CFCBundle::CFCBundle(CFURLRef url) | |
| : CFCReleaser<CFBundleRef>(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<CFURLRef> 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<CFURLRef> 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; | |
| } |