From 19e32fe18c9b3076e3077b68d8ccd2f23fe17a66 Mon Sep 17 00:00:00 2001 From: rfm Date: Sun, 10 Feb 2013 06:24:56 +0000 Subject: [PATCH] OSX compatibility when we are creating a URL relative to an incompatible base. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@36102 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 6 ++++++ Source/NSURL.m | 23 ++++++++++++----------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 092f6cafa..f33a08056 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-02-10 Richard Frith-Macdonald + + * Source/NSURL.m: For OSX compatibility, if we are creating a relative + URL and the base URL has a different scheme from the base, then we + ignore the base URL rather than raising an exception. + 2013-02-03 Richard Frith-Macdonald * Source/NSThread.m: Fix error in check for perform on finished thread. diff --git a/Source/NSURL.m b/Source/NSURL.m index b53f15813..367b5c18a 100644 --- a/Source/NSURL.m +++ b/Source/NSURL.m @@ -868,20 +868,20 @@ static NSUInteger urlAlign; *ptr = tolower(*ptr); } } - if (base != 0 && base->scheme != 0 - && strcmp(base->scheme, buf->scheme) != 0) - { - [NSException raise: NSInvalidArgumentException - format: @"[%@ %@](%@, %@) " - @"scheme of base and relative parts does not match", - NSStringFromClass([self class]), - NSStringFromSelector(_cmd), - aUrlString, aBaseUrl]; - } } } start = end; + if (buf->scheme != 0 && base != 0 + && 0 != strcmp(buf->scheme, base->scheme)) + { + /* The relative URL is of a different scheme to the base ... + * so it's actually an absolute URL without a base. + */ + DESTROY(_baseURL); + base = 0; + } + if (buf->scheme == 0 && base != 0) { buf->scheme = base->scheme; @@ -896,7 +896,8 @@ static NSUInteger urlAlign; { buf->isFile = YES; } - else if (strcmp(buf->scheme, "mailto") == 0) + else if (strcmp(buf->scheme, "data") == 0 + || strcmp(buf->scheme, "mailto") == 0) { usesFragments = NO; usesParameters = NO;