@@ -1,9 +1,7 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, - * 2018, 2019, 2020 - * Jonathan Schleifer + * Copyright (c) 2008-2021 Jonathan Schleifer * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE.QPL included in @@ -330,12 +328,11 @@ .stringByDeletingEnclosingWhitespaces; value = [header substringFromIndex: pos + 1] .stringByDeletingEnclosingWhitespaces; - [_clientHeaders setObject: value - forKey: name]; + [_clientHeaders setObject: value forKey: name]; } - (void)setBody: (OFString *)path { OFString *contentLength = nil; @@ -344,12 +341,11 @@ _body = nil; if ([path isEqual: @"-"]) _body = [of_stdin copy]; else { - _body = [[OFFile alloc] initWithPath: path - mode: @"r"]; + _body = [[OFFile alloc] initWithPath: path mode: @"r"]; @try { unsigned long long fileSize = [[OFFileManager defaultManager] attributesOfItemAtPath: path].fileSize; @@ -534,12 +530,11 @@ #ifdef OF_HAVE_SANDBOX [sandbox unveilPath: (outputPath != nil ? outputPath : OF_PATH_CURRENT_DIRECTORY) permissions: (_continue ? @"rwc" : @"wc")]; /* In case we use ObjOpenSSL for https later */ - [sandbox unveilPath: @"/etc/ssl" - permissions: @"r"]; + [sandbox unveilPath: @"/etc/ssl" permissions: @"r"]; sandbox.allowsUnveil = false; [OFApplication of_activateSandbox: sandbox]; #endif @@ -578,12 +573,11 @@ if (_insecure) _HTTPClient.allowsInsecureRedirects = true; _useUnicode = ([OFLocale encoding] == OF_STRING_ENCODING_UTF_8); - [self performSelector: @selector(downloadNextURL) - afterDelay: 0]; + [self performSelector: @selector(downloadNextURL) afterDelay: 0]; } - (void)client: (OFHTTPClient *)client didCreateSocket: (OFTCPSocket *)sock request: (OFHTTPRequest *)request @@ -598,16 +592,12 @@ request: (OFHTTPRequest *)request { /* TODO: Do asynchronously and print status */ while (!_body.atEndOfStream) { char buffer[4096]; - size_t length; - - length = [_body readIntoBuffer: buffer - length: 4096]; - [body writeBuffer: buffer - length: length]; + size_t length = [_body readIntoBuffer: buffer length: 4096]; + [body writeBuffer: buffer length: length]; } } - (bool)client: (OFHTTPClient *)client shouldFollowRedirect: (OFURL *)URL @@ -623,12 +613,11 @@ OFEnumerator *objectEnumerator = [headers objectEnumerator]; OFString *key, *object; while ((key = [keyEnumerator nextObject]) != nil && (object = [objectEnumerator nextObject]) != nil) - [of_stdout writeFormat: @" %@: %@\n", - key, object]; + [of_stdout writeFormat: @" %@: %@\n", key, object]; objc_autoreleasePoolPop(pool); } if (!_quiet) { @@ -675,15 +664,13 @@ [self performSelector: @selector(downloadNextURL) afterDelay: 0]; return false; } - _received += length; + [_output writeBuffer: buffer length: length]; - [_output writeBuffer: buffer - length: length]; - + _received += length; [_progressBar setReceived: _received]; if (response.atEndOfStream) { [_progressBar stop]; [_progressBar draw]; @@ -981,20 +968,18 @@ [_currentFileName release]; _currentFileName = nil; response.delegate = self; - [response asyncReadIntoBuffer: _buffer - length: [OFSystemInfo pageSize]]; + [response asyncReadIntoBuffer: _buffer length: [OFSystemInfo pageSize]]; return; next: [_currentFileName release]; _currentFileName = nil; - [self performSelector: @selector(downloadNextURL) - afterDelay: 0]; + [self performSelector: @selector(downloadNextURL) afterDelay: 0]; } - (void)downloadNextURL { OFString *URLString = nil; @@ -1063,10 +1048,18 @@ _currentFileName = [_outputPath copy]; if (_currentFileName == nil) _currentFileName = [URL.path.lastPathComponent copy]; + if ([_currentFileName isEqual: @"/"]) { + [_currentFileName release]; + _currentFileName = nil; + } + + if (_currentFileName == nil) + _currentFileName = @"unnamed"; + if (_continue) { @try { unsigned long long size = [[OFFileManager defaultManager] attributesOfItemAtPath: _currentFileName].fileSize; @@ -1077,12 +1070,11 @@ _resumedFrom = (unsigned long long)size; range = [OFString stringWithFormat: @"bytes=%jd-", _resumedFrom]; - [clientHeaders setObject: range - forKey: @"Range"]; + [clientHeaders setObject: range forKey: @"Range"]; } @catch (OFRetrieveItemAttributesFailedException *e) { } } if (!_quiet) { @@ -1099,9 +1091,8 @@ _detectFileNameRequest = false; [_HTTPClient asyncPerformRequest: request]; return; next: - [self performSelector: @selector(downloadNextURL) - afterDelay: 0]; + [self performSelector: @selector(downloadNextURL) afterDelay: 0]; } @end