summaryrefslogtreecommitdiffstats
path: root/macosx
diff options
context:
space:
mode:
authordas <das>2008-12-07 16:39:32 (GMT)
committerdas <das>2008-12-07 16:39:32 (GMT)
commitae94091202e41e5a219b1dee5916c485f243b39d (patch)
tree5bf778b541dc9a212f14d50cbce5d9c42cb3e9c6 /macosx
parent92c485de11094aa36afc3b3268e96b7fa882ba43 (diff)
downloadtcl-ae94091202e41e5a219b1dee5916c485f243b39d.zip
tcl-ae94091202e41e5a219b1dee5916c485f243b39d.tar.gz
tcl-ae94091202e41e5a219b1dee5916c485f243b39d.tar.bz2
Tcl_MacOSXOpenVersionedBundleResources: Fix leak, simplify logic
Diffstat (limited to 'macosx')
-rw-r--r--macosx/tclMacOSXBundle.c64
1 files changed, 36 insertions, 28 deletions
diff --git a/macosx/tclMacOSXBundle.c b/macosx/tclMacOSXBundle.c
index 469d2f1..f9af0b9 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.11 2007/04/23 20:46:13 das Exp $
+ * RCS: @(#) $Id: tclMacOSXBundle.c,v 1.11.4.1 2008/12/07 16:39:32 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]) {