From 181346c56802d47be4b0101ebf0576d9c268bd7c Mon Sep 17 00:00:00 2001 From: fredkiefer Date: Fri, 3 Apr 2020 17:53:34 +0200 Subject: [PATCH 1/3] Get too compile with gcc. Address some pull request comments. --- Source/NSURL.m | 189 ++++++++++++++++++++++++------------------------- 1 file changed, 94 insertions(+), 95 deletions(-) diff --git a/Source/NSURL.m b/Source/NSURL.m index 7e68f9c33..a35cebc27 100644 --- a/Source/NSURL.m +++ b/Source/NSURL.m @@ -2327,13 +2327,13 @@ GS_PRIVATE_INTERNAL(NSURLComponents) @implementation NSURLComponents // Creating URL components... -+ (instancetype) componentsWithString:(NSString *)urlString ++ (instancetype) componentsWithString: (NSString *)urlString { return [[NSURLComponents alloc] initWithString: urlString]; } -+ (instancetype) componentsWithURL:(NSURL *)url - resolvingAgainstBaseURL:(BOOL)resolve ++ (instancetype) componentsWithURL: (NSURL *)url + resolvingAgainstBaseURL: (BOOL)resolve { return [[NSURLComponents alloc] initWithURL: url resolvingAgainstBaseURL: resolve]; @@ -2358,7 +2358,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) return self; } -- (instancetype)initWithString:(NSString *)URLString +- (instancetype) initWithString: (NSString *)URLString { self = [self init]; if (self != nil) @@ -2368,13 +2368,14 @@ GS_PRIVATE_INTERNAL(NSURLComponents) return self; } -- (instancetype)initWithURL:(NSURL *)url - resolvingAgainstBaseURL:(BOOL)resolve +- (instancetype) initWithURL: (NSURL *)url + resolvingAgainstBaseURL: (BOOL)resolve { - NSURL *tempURL = url; self = [self init]; if (self != nil) { + NSURL *tempURL = url; + if (resolve) { tempURL = [url absoluteURL]; @@ -2406,6 +2407,46 @@ GS_PRIVATE_INTERNAL(NSURLComponents) resolvingAgainstBaseURL: NO]; } +// Regenerate URL when components are changed... +- (void) _regenerateURL +{ + if (internal->_dirty == NO) + { + return; + } + else + { + NSURL *u; + u = [[NSURL alloc] initWithScheme: internal->_scheme + user: internal->_user + password: internal->_password + host: internal->_host + port: internal->_port + fullPath: internal->_path + parameterString: nil + query: [self query] + fragment: internal->_fragment]; + ASSIGNCOPY(internal->_url, u); + + { + // Find ranges + NSString *urlString = [u absoluteString]; +#define URL_COMPONENT_RANGE(part) \ + (part ? [urlString rangeOfString:part] : NSMakeRange(NSNotFound, 0)) + internal->_rangeOfFragment = URL_COMPONENT_RANGE(internal->_fragment); + internal->_rangeOfHost = URL_COMPONENT_RANGE(internal->_host); + internal->_rangeOfPassword = URL_COMPONENT_RANGE(internal->_password); + internal->_rangeOfPath = URL_COMPONENT_RANGE(internal->_path); + internal->_rangeOfPort = URL_COMPONENT_RANGE([internal->_port stringValue]); + internal->_rangeOfQuery = URL_COMPONENT_RANGE([self query]); + internal->_rangeOfScheme = URL_COMPONENT_RANGE(internal->_scheme); + internal->_rangeOfUser = URL_COMPONENT_RANGE(internal->_user); +#undef URL_COMPONENT_RANGE + } + internal->_dirty = NO; + } + } + // Getting the URL - (NSString *) string { @@ -2427,66 +2468,22 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setURL: (NSURL *)url { - ASSIGNCOPY(internal->_url, url); - - // components... - ASSIGNCOPY(internal->_fragment, [url fragment]); - ASSIGNCOPY(internal->_host, [url host]); - ASSIGNCOPY(internal->_password, [url password]); - ASSIGNCOPY(internal->_path, [url path]); - ASSIGNCOPY(internal->_port, [url port]); - ASSIGNCOPY(internal->_query, [url query]); - ASSIGNCOPY(internal->_scheme, [url scheme]); - ASSIGNCOPY(internal->_user, [url user]); - - _dirty = YES; + // Set all the components... + [self setScheme: [url scheme]]; + [self setHost: [url host]]; + [self setPort: [url port]]; + [self setUser: [url user]]; + [self setPassword: [url password]]; + [self setPath: [url path]]; + [self setQuery: [url query]]; + [self setFragment: [url fragment]]; } -- (NSURL *)URLRelativeToURL: (NSURL *)baseURL +- (NSURL *) URLRelativeToURL: (NSURL *)baseURL { return nil; } -// Regenerate URL when components are changed... -- (void) _regenerateURL -{ - if (_dirty == NO) - { - return; - } - else - { - NSURL *u; - u = [[NSURL alloc] initWithScheme: internal->_scheme - user: internal->_user - password: internal->_password - host: internal->_host - port: internal->_port - fullPath: internal->_path - parameterString: nil - query: internal->_query - fragment: internal->_fragment]; - ASSIGNCOPY(internal->_url, u); - - { - // Find ranges - NSString *urlString = [u absoluteString]; -#define URL_COMPONENT_RANGE(part) \ - (part ? [urlString rangeOfString:part] : NSMakeRange(NSNotFound, 0)) - internal->_rangeOfFragment = URL_COMPONENT_RANGE(internal->_fragment); - internal->_rangeOfHost = URL_COMPONENT_RANGE(internal->_host); - internal->_rangeOfPassword = URL_COMPONENT_RANGE(internal->_password); - internal->_rangeOfPath = URL_COMPONENT_RANGE(internal->_path); - internal->_rangeOfPort = URL_COMPONENT_RANGE([internal->_port stringValue]); - internal->_rangeOfQuery = URL_COMPONENT_RANGE(internal->_query); - internal->_rangeOfScheme = URL_COMPONENT_RANGE(internal->_scheme); - internal->_rangeOfUser = URL_COMPONENT_RANGE(internal->_user); -#undef URL_COMPONENT_RANGE - } - _dirty = NO; - } - } - // Accessing Components in Native Format - (NSString *) fragment { @@ -2496,7 +2493,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setFragment: (NSString *)fragment { ASSIGNCOPY(internal->_fragment, fragment); - _dirty = YES; + internal->_dirty = YES; } - (NSString *) host @@ -2507,7 +2504,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setHost: (NSString *)host { ASSIGNCOPY(internal->_host, host); - _dirty = YES; + internal->_dirty = YES; } - (NSString *) password @@ -2518,7 +2515,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPassword: (NSString *)password { ASSIGNCOPY(internal->_password, password); - _dirty = YES; + internal->_dirty = YES; } - (NSString *) path @@ -2529,7 +2526,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPath: (NSString *)path { ASSIGNCOPY(internal->_path, path); - _dirty = YES; + internal->_dirty = YES; } - (NSNumber *) port @@ -2540,17 +2537,31 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPort: (NSNumber *)port { ASSIGNCOPY(internal->_port, port); - _dirty = YES; + internal->_dirty = YES; } - (NSString *) query { - return internal->_query; + NSString *query = @""; + NSEnumerator *en = [internal->_queryItems objectEnumerator]; + NSURLQueryItem *item = nil; + + while ((item = (NSURLQueryItem *)[en nextObject]) != nil) + { + NSString *name = [item name]; + NSString *value = [[item value] _stringByAddingPercentEscapesForQuery]; + NSString *itemString = [NSString stringWithFormat: @"%@=%@",name,value]; + query = [query stringByAppendingString: itemString]; + if (item != [internal->_queryItems lastObject]) + { + query = [query stringByAppendingString: @"&"]; + } + } + return query; } - (void) setQuery: (NSString *)query { - ASSIGNCOPY(internal->_query, query); if (query != nil) { NSMutableArray *result = [NSMutableArray arrayWithCapacity: 5]; @@ -2569,6 +2580,10 @@ GS_PRIVATE_INTERNAL(NSURLComponents) } [self setQueryItems: result]; } + else + { + [self setQueryItems: nil]; + } } - (NSArray *) queryItems @@ -2578,25 +2593,9 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setQueryItems: (NSArray *)queryItems { - NSString *query = @""; - NSEnumerator *en = [queryItems objectEnumerator]; - NSURLQueryItem *item = nil; - - while ((item = (NSURLQueryItem *)[en nextObject]) != nil) - { - NSString *name = [item name]; - NSString *value = [[item value] _stringByAddingPercentEscapesForQuery]; - NSString *itemString = [NSString stringWithFormat: @"%@=%@",name,value]; - query = [query stringByAppendingString: itemString]; - if (item != [queryItems lastObject]) - { - query = [query stringByAppendingString: @"&"]; - } - } - - ASSIGNCOPY(internal->_query, query); // add query string... + ASSIGNCOPY(internal->_queryItems, queryItems); - _dirty = YES; + internal->_dirty = YES; } - (NSString *) scheme @@ -2607,7 +2606,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setScheme: (NSString *)scheme { ASSIGNCOPY(internal->_scheme, scheme); - _dirty = YES; + internal->_dirty = YES; } - (NSString *) user @@ -2618,7 +2617,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setUser: (NSString *)user { ASSIGNCOPY(internal->_user, user); - _dirty = YES; + internal->_dirty = YES; } // Accessing Components in PercentEncoded Format @@ -2631,7 +2630,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPercentEncodedFragment: (NSString *)fragment { ASSIGNCOPY(internal->_fragment, [fragment stringByRemovingPercentEncoding]); - _dirty = YES; + internal->_dirty = YES; } - (NSString *) percentEncodedHost @@ -2643,7 +2642,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPercentEncodedHost: (NSString *)host { ASSIGNCOPY(internal->_host, [host stringByRemovingPercentEncoding]); - _dirty = YES; + internal->_dirty = YES; } - (NSString *) percentEncodedPassword @@ -2655,7 +2654,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPercentEncodedPassword: (NSString *)password { ASSIGNCOPY(internal->_password, [password stringByRemovingPercentEncoding]); - _dirty = YES; + internal->_dirty = YES; } - (NSString *) percentEncodedPath @@ -2667,7 +2666,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPercentEncodedPath: (NSString *)path { ASSIGNCOPY(internal->_path, [path stringByRemovingPercentEncoding]); - _dirty = YES; + internal->_dirty = YES; } - (NSString *) percentEncodedQuery @@ -2678,7 +2677,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPercentEncodedQuery: (NSString *)query { ASSIGNCOPY(internal->_query, [query stringByRemovingPercentEncoding]); - _dirty = YES; + internal->_dirty = YES; } - (NSArray *) percentEncodedQueryItems @@ -2700,7 +2699,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPercentEncodedScheme: (NSString *)scheme { ASSIGNCOPY(internal->_scheme, scheme); - _dirty = YES; + internal->_dirty = YES; } - (NSString *) percentEncodedUser @@ -2712,7 +2711,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPercentEncodedUser: (NSString *)user { ASSIGNCOPY(internal->_user, [user stringByRemovingPercentEncoding]); - _dirty = YES; + internal->_dirty = YES; } // Locating components of the URL string representation From c170c8c1e7d12fe5bef01fc4aedfb4d9eca873a6 Mon Sep 17 00:00:00 2001 From: fredkiefer Date: Fri, 3 Apr 2020 18:15:07 +0200 Subject: [PATCH 2/3] Correct more issues and flag the remaining ones with "FIXME". --- Source/NSURL.m | 56 ++++++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/Source/NSURL.m b/Source/NSURL.m index a35cebc27..7c1c4e891 100644 --- a/Source/NSURL.m +++ b/Source/NSURL.m @@ -51,7 +51,6 @@ function may be incorrect NSString *_password; \ NSString *_path; \ NSNumber *_port; \ - NSString *_query; \ NSArray *_queryItems; \ NSString *_scheme; \ NSString *_user; \ @@ -2393,7 +2392,6 @@ GS_PRIVATE_INTERNAL(NSURLComponents) RELEASE(internal->_password); RELEASE(internal->_path); RELEASE(internal->_port); - RELEASE(internal->_query); RELEASE(internal->_queryItems); RELEASE(internal->_scheme); RELEASE(internal->_user); @@ -2416,6 +2414,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) } else { + // FIXME NSURL *u; u = [[NSURL alloc] initWithScheme: internal->_scheme user: internal->_user @@ -2450,14 +2449,13 @@ GS_PRIVATE_INTERNAL(NSURLComponents) // Getting the URL - (NSString *) string { - [self _regenerateURL]; - return [internal->_url absoluteString]; + return [[self url] absoluteString]; } - (void) setString: (NSString *)urlString { NSURL *url = [NSURL URLWithString: urlString]; - [self setURL : url]; + [self setURL: url]; } - (NSURL *) URL @@ -2549,13 +2547,13 @@ GS_PRIVATE_INTERNAL(NSURLComponents) while ((item = (NSURLQueryItem *)[en nextObject]) != nil) { NSString *name = [item name]; - NSString *value = [[item value] _stringByAddingPercentEscapesForQuery]; + NSString *value = [item value]; NSString *itemString = [NSString stringWithFormat: @"%@=%@",name,value]; - query = [query stringByAppendingString: itemString]; - if (item != [internal->_queryItems lastObject]) + if ([query length] > 0) { query = [query stringByAppendingString: @"&"]; } + query = [query stringByAppendingString: itemString]; } return query; } @@ -2629,8 +2627,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPercentEncodedFragment: (NSString *)fragment { - ASSIGNCOPY(internal->_fragment, [fragment stringByRemovingPercentEncoding]); - internal->_dirty = YES; + [self setFragment: [fragment stringByRemovingPercentEncoding]]; } - (NSString *) percentEncodedHost @@ -2641,8 +2638,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPercentEncodedHost: (NSString *)host { - ASSIGNCOPY(internal->_host, [host stringByRemovingPercentEncoding]); - internal->_dirty = YES; + [self setHost: [host stringByRemovingPercentEncoding]]; } - (NSString *) percentEncodedPassword @@ -2653,8 +2649,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPercentEncodedPassword: (NSString *)password { - ASSIGNCOPY(internal->_password, [password stringByRemovingPercentEncoding]); - internal->_dirty = YES; + [self setPassword: [password stringByRemovingPercentEncoding]]; } - (NSString *) percentEncodedPath @@ -2665,41 +2660,55 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPercentEncodedPath: (NSString *)path { - ASSIGNCOPY(internal->_path, [path stringByRemovingPercentEncoding]); - internal->_dirty = YES; + [self setPath: [path stringByRemovingPercentEncoding]]; } - (NSString *) percentEncodedQuery { - return internal->_query; + NSString *query = @""; + NSEnumerator *en = [internal->_queryItems objectEnumerator]; + NSURLQueryItem *item = nil; + + while ((item = (NSURLQueryItem *)[en nextObject]) != nil) + { + NSString *name = [[item name] _stringByAddingPercentEscapesForQuery]; + NSString *value = [[item value] _stringByAddingPercentEscapesForQuery]; + NSString *itemString = [NSString stringWithFormat: @"%@=%@",name,value]; + if ([query length] > 0) + { + query = [query stringByAppendingString: @"&"]; + } + query = [query stringByAppendingString: itemString]; + } + return query; } - (void) setPercentEncodedQuery: (NSString *)query { - ASSIGNCOPY(internal->_query, [query stringByRemovingPercentEncoding]); - internal->_dirty = YES; + [self setQuery: [query stringByRemovingPercentEncoding]]; } - (NSArray *) percentEncodedQueryItems { + // FIXME return internal->_queryItems; } - (void) setPercentEncodedQueryItems: (NSArray *)queryItems { + // FIXME [self setQueryItems: queryItems]; } - (NSString *) percentEncodedScheme { - return [internal->_path stringByAddingPercentEncodingWithAllowedCharacters: + return [internal->_scheme stringByAddingPercentEncodingWithAllowedCharacters: [NSCharacterSet URLPathAllowedCharacterSet]]; } - (void) setPercentEncodedScheme: (NSString *)scheme { - ASSIGNCOPY(internal->_scheme, scheme); - internal->_dirty = YES; + [self setScheme: [scheme stringByRemovingPercentEncoding]]; } - (NSString *) percentEncodedUser @@ -2710,8 +2719,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) - (void) setPercentEncodedUser: (NSString *)user { - ASSIGNCOPY(internal->_user, [user stringByRemovingPercentEncoding]); - internal->_dirty = YES; + [self setUser: [user stringByRemovingPercentEncoding]]; } // Locating components of the URL string representation From 0bc1052bd60f1f713b235dee5299107bf2812045 Mon Sep 17 00:00:00 2001 From: fredkiefer Date: Fri, 3 Apr 2020 18:37:55 +0200 Subject: [PATCH 3/3] Fix typo in last commit. --- Source/NSURL.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/NSURL.m b/Source/NSURL.m index 7c1c4e891..ff8ae03cb 100644 --- a/Source/NSURL.m +++ b/Source/NSURL.m @@ -2449,7 +2449,7 @@ GS_PRIVATE_INTERNAL(NSURLComponents) // Getting the URL - (NSString *) string { - return [[self url] absoluteString]; + return [[self URL] absoluteString]; } - (void) setString: (NSString *)urlString