forked from OSchip/llvm-project
100 lines
2.7 KiB
C++
100 lines
2.7 KiB
C++
//===-- 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;
|
|
}
|