summaryrefslogtreecommitdiffstats
path: root/macosx/tclMacOSXBundle.c
diff options
context:
space:
mode:
authordas <das>2008-12-07 16:39:56 (GMT)
committerdas <das>2008-12-07 16:39:56 (GMT)
commit21007eb5fa1a81fd34515e6412b38e7531dcf45c (patch)
tree1706cfa3a9ed4d38431bb744a73e4fea31ad718e /macosx/tclMacOSXBundle.c
parenta7c51a9e790452db4a5d6bb8f38111f2f8e401bd (diff)
downloadtcl-21007eb5fa1a81fd34515e6412b38e7531dcf45c.zip
tcl-21007eb5fa1a81fd34515e6412b38e7531dcf45c.tar.gz
tcl-21007eb5fa1a81fd34515e6412b38e7531dcf45c.tar.bz2
Tcl_MacOSXOpenVersionedBundleResources: Fix leak, simplify logic
Diffstat (limited to 'macosx/tclMacOSXBundle.c')
-rw-r--r--macosx/tclMacOSXBundle.c64
1 files changed, 36 insertions, 28 deletions
diff --git a/macosx/tclMacOSXBundle.c b/macosx/tclMacOSXBundle.c
index 3355e5f..af047d2 100644
--- a/macosx/tclMacOSXBundle.c
+++ b/macosx/tclMacOSXBundle.c
@@ -48,7 +48,7 @@
* permission to use and distribute the software in accordance with the
* terms specified in this license.
*
- * RCS: @(#) $Id: tclMacOSXBundle.c,v 1.3.2.6 2007/04/29 02:21:33 das Exp $
+ * RCS: @(#) $Id: tclMacOSXBundle.c,v 1.3.2.7 2008/12/07 16:39:56 das Exp $
*/
#include "tclPort.h"
@@ -121,7 +121,7 @@ Tcl_MacOSXOpenVersionedBundleResources(
char *libraryPath)
{
#ifdef HAVE_COREFOUNDATION
- CFBundleRef bundleRef;
+ CFBundleRef bundleRef, versionedBundleRef = NULL;
CFStringRef bundleNameRef;
CFURLRef libURL;
@@ -138,41 +138,46 @@ Tcl_MacOSXOpenVersionedBundleResources(
* Create bundle from bundleVersion subdirectory of 'Versions'.
*/
- CFBundleRef versionedBundleRef = NULL;
- CFURLRef versionedBundleURL = NULL;
- CFStringRef bundleVersionRef = CFStringCreateWithCString(NULL,
- bundleVersion, kCFStringEncodingUTF8);
CFURLRef bundleURL = CFBundleCopyBundleURL(bundleRef);
if (bundleURL) {
- CFStringRef bundleTailRef = CFURLCopyLastPathComponent(bundleURL);
+ CFStringRef bundleVersionRef = CFStringCreateWithCString(NULL,
+ bundleVersion, kCFStringEncodingUTF8);
- if (bundleTailRef) {
- if (CFStringCompare(bundleTailRef, bundleVersionRef, 0) ==
- kCFCompareEqualTo) {
- versionedBundleRef = bundleRef;
- }
- CFRelease(bundleTailRef);
- }
- }
+ if (bundleVersionRef) {
+ CFStringRef bundleTailRef = CFURLCopyLastPathComponent(
+ bundleURL);
- if (bundleURL && !versionedBundleRef) {
- CFURLRef versURL = CFURLCreateCopyAppendingPathComponent(NULL,
- bundleURL, CFSTR("Versions"), TRUE);
-
- if (versURL) {
- versionedBundleURL = CFURLCreateCopyAppendingPathComponent(
- NULL, versURL, bundleVersionRef, TRUE);
- CFRelease(versURL);
+ if (bundleTailRef) {
+ if (CFStringCompare(bundleTailRef, bundleVersionRef, 0) ==
+ kCFCompareEqualTo) {
+ versionedBundleRef = (CFBundleRef) CFRetain(bundleRef);
+ }
+ CFRelease(bundleTailRef);
+ }
+ if (!versionedBundleRef) {
+ CFURLRef versURL = CFURLCreateCopyAppendingPathComponent(
+ NULL, bundleURL, CFSTR("Versions"), TRUE);
+
+ if (versURL) {
+ CFURLRef versionedBundleURL =
+ CFURLCreateCopyAppendingPathComponent(
+ NULL, versURL, bundleVersionRef, TRUE);
+ if (versionedBundleURL) {
+ versionedBundleRef = CFBundleCreate(NULL,
+ versionedBundleURL);
+ CFRelease(versionedBundleURL);
+ }
+ CFRelease(versURL);
+ }
+ }
+ CFRelease(bundleVersionRef);
}
CFRelease(bundleURL);
}
- CFRelease(bundleVersionRef);
- if (versionedBundleURL) {
- versionedBundleRef = CFBundleCreate(NULL, versionedBundleURL);
- CFRelease(versionedBundleURL);
+ if (versionedBundleRef) {
+ bundleRef = versionedBundleRef;
}
- bundleRef = versionedBundleRef;
}
if (bundleRef) {
@@ -219,6 +224,9 @@ Tcl_MacOSXOpenVersionedBundleResources(
(unsigned char*) libraryPath, maxPathLen);
CFRelease(libURL);
}
+ if (versionedBundleRef) {
+ CFRelease(versionedBundleRef);
+ }
}
if (libraryPath[0]) {