CFBundle.cpp revision 24943d2ee8bfaa7cf5893e4709143924157a5c1e
1//===-- CFBundle.cpp --------------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//  Created by Greg Clayton on 1/16/08.
11//
12//===----------------------------------------------------------------------===//
13
14#include "CFBundle.h"
15#include "CFString.h"
16
17//----------------------------------------------------------------------
18// CFBundle constructor
19//----------------------------------------------------------------------
20CFBundle::CFBundle(const char *path) :
21    CFReleaser<CFBundleRef>(),
22    m_bundle_url()
23{
24    if (path && path[0])
25        SetPath(path);
26}
27
28//----------------------------------------------------------------------
29// CFBundle copy constructor
30//----------------------------------------------------------------------
31CFBundle::CFBundle(const CFBundle& rhs) :
32    CFReleaser<CFBundleRef>(rhs),
33    m_bundle_url(rhs.m_bundle_url)
34{
35
36}
37
38//----------------------------------------------------------------------
39// CFBundle copy constructor
40//----------------------------------------------------------------------
41CFBundle&
42CFBundle::operator=(const CFBundle& rhs)
43{
44    *this = rhs;
45    return *this;
46}
47
48//----------------------------------------------------------------------
49// Destructor
50//----------------------------------------------------------------------
51CFBundle::~CFBundle()
52{
53}
54
55//----------------------------------------------------------------------
56// Set the path for a bundle by supplying a
57//----------------------------------------------------------------------
58bool
59CFBundle::SetPath (const char *path)
60{
61    CFAllocatorRef alloc = kCFAllocatorDefault;
62    // Release our old bundle and ULR
63    reset();    // This class is a CFReleaser<CFBundleRef>
64    m_bundle_url.reset();
65    // Make a CFStringRef from the supplied path
66    CFString cf_path;
67    cf_path.SetFileSystemRepresentation(path);
68    if (cf_path.get())
69    {
70        // Make our Bundle URL
71        m_bundle_url.reset (::CFURLCreateWithFileSystemPath (alloc, cf_path.get(), kCFURLPOSIXPathStyle, true));
72        if (m_bundle_url.get())
73        {
74            reset (::CFBundleCreate (alloc, m_bundle_url.get()));
75        }
76    }
77    return get() != NULL;
78}
79
80CFStringRef
81CFBundle::GetIdentifier () const
82{
83    CFBundleRef bundle = get();
84    if (bundle != NULL)
85        return ::CFBundleGetIdentifier (bundle);
86    return NULL;
87}
88