Overview
Context
Changes
Modified src/Makefile
from [59aef9b367]
to [dde0edf477].
︙ | | |
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
|
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
|
+
-
-
-
-
|
objfw-defs.h \
platform.h \
${USE_INCLUDES_ATOMIC}
SRCS += OFASPrintF.m \
OFAdjacentArray.m \
OFAdjacentSubarray.m \
OFArchiveURIHandler.m \
OFBase64.m \
OFBitSetCharacterSet.m \
OFBytesValue.m \
OFCRC16.m \
OFCRC32.m \
OFCountedMapTableSet.m \
OFEmbeddedURIHandler.m \
OFGZIPURIHandler.m \
OFHuffmanTree.m \
OFINIFileSettings.m \
OFInvertedCharacterSet.m \
OFLHADecompressingStream.m \
OFLHAURIHandler.m \
OFMapTableDictionary.m \
OFMapTableSet.m \
OFMutableAdjacentArray.m \
OFMutableMapTableDictionary.m \
OFMutableMapTableSet.m \
OFMutableUTF8String.m \
OFNonretainedObjectValue.m \
OFPointValue.m \
OFPointerValue.m \
OFRangeCharacterSet.m \
OFRangeValue.m \
OFRectValue.m \
OFSandbox.m \
OFSizeValue.m \
OFStrPTime.m \
OFSubarray.m \
OFTarURIHandler.m \
OFUTF8String.m \
OFZIPURIHandler.m \
${LIBBASES_M} \
${RUNTIME_AUTORELEASE_M} \
${RUNTIME_INSTANCE_M} \
${UNICODE_M}
SRCS_FILES += OFFileURIHandler.m
SRCS_SOCKETS += OFDNSResolverSettings.m \
${OF_EPOLL_KERNEL_EVENT_OBSERVER_M} \
|
︙ | | |
Renamed and modified
src/OFZIPURIHandler.h
[0359782d45]
to src/OFArchiveURIHandler.h
[b4b1b87298].
︙ | | |
13
14
15
16
17
18
19
20
21
22
23
|
13
14
15
16
17
18
19
20
21
22
23
|
-
+
|
* file.
*/
#import "OFURIHandler.h"
OF_ASSUME_NONNULL_BEGIN
@interface OFZIPURIHandler: OFURIHandler
@interface OFArchiveURIHandler: OFURIHandler
@end
OF_ASSUME_NONNULL_END
|
Renamed and modified
src/OFZIPURIHandler.m
[42924d2309]
to src/OFArchiveURIHandler.m
[8522ccf377].
︙ | | |
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
+
+
-
+
+
+
+
+
-
+
+
-
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
|
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#include <errno.h>
#import "OFZIPURIHandler.h"
#import "OFArchiveURIHandler.h"
#import "OFGZIPStream.h"
#import "OFLHAArchive.h"
#import "OFStream.h"
#import "OFTarArchive.h"
#import "OFURI.h"
#import "OFZIPArchive.h"
#import "OFInvalidArgumentException.h"
#import "OFOpenItemFailedException.h"
@implementation OFZIPURIHandler
@implementation OFArchiveURIHandler
- (OFStream *)openItemAtURI: (OFURI *)URI mode: (OFString *)mode
{
void *pool = objc_autoreleasePoolPush();
OFString *scheme = URI.scheme;
OFString *percentEncodedPath, *archiveURI, *path;
OFString *percentEncodedPath, *path;
size_t pos;
OFZIPArchive *archive;
OFURI *archiveURI;
OFStream *stream;
if (![URI.scheme isEqual: @"of-zip"] || URI.host != nil ||
URI.port != nil || URI.user != nil || URI.password != nil ||
URI.query != nil || URI.fragment != nil)
if (URI.host != nil || URI.port != nil || URI.user != nil ||
URI.password != nil || URI.query != nil || URI.fragment != nil)
@throw [OFInvalidArgumentException exception];
if (![mode isEqual: @"r"])
/*
* Writing has some implications that are not decided yet: Will
* it always append to an archive? What happens if the file
* already exists?
*/
@throw [OFInvalidArgumentException exception];
/*
* GZIP only compresses one file and thus has no path inside an
* archive.
*/
if ([scheme isEqual: @"of-gzip"]) {
stream = [OFURIHandler openItemAtURI: [OFURI URIWithString:
URI.path]
mode: @"r"];
stream = [OFGZIPStream streamWithStream: stream mode: @"r"];
goto end;
}
percentEncodedPath = URI.percentEncodedPath;
pos = [percentEncodedPath rangeOfString: @"!"].location;
if (pos == OFNotFound)
@throw [OFInvalidArgumentException exception];
archiveURI = [OFURI URIWithString:
archiveURI = [percentEncodedPath substringWithRange:
OFMakeRange(0, pos)].stringByRemovingPercentEncoding;
[percentEncodedPath substringWithRange: OFMakeRange(0, pos)]
.stringByRemovingPercentEncoding];
path = [percentEncodedPath substringWithRange:
OFMakeRange(pos + 1, percentEncodedPath.length - pos - 1)]
.stringByRemovingPercentEncoding;
if ([scheme isEqual: @"of-lha"]) {
OFLHAArchive *archive = [OFLHAArchive archiveWithURI: archiveURI
mode: @"r"];
OFLHAArchiveEntry *entry;
archive = [OFZIPArchive
archiveWithURI: [OFURI URIWithString: archiveURI]
mode: @"r"];
stream = [archive streamForReadingFile: path];
while ((entry = [archive nextEntry]) != nil) {
if ([entry.fileName isEqual: path]) {
stream = [archive streamForReadingCurrentEntry];
goto end;
}
}
@throw [OFOpenItemFailedException exceptionWithURI: URI
mode: mode
errNo: ENOENT];
} else if ([scheme isEqual: @"of-tar"]) {
OFTarArchive *archive = [OFTarArchive archiveWithURI: archiveURI
mode: @"r"];
OFTarArchiveEntry *entry;
while ((entry = [archive nextEntry]) != nil) {
if ([entry.fileName isEqual: path]) {
stream = [archive streamForReadingCurrentEntry];
goto end;
}
}
@throw [OFOpenItemFailedException exceptionWithURI: URI
mode: mode
errNo: ENOENT];
} else if ([scheme isEqual: @"of-zip"]) {
OFZIPArchive *archive = [OFZIPArchive archiveWithURI: archiveURI
mode: @"r"];
stream = [archive streamForReadingFile: path];
} else
@throw [OFInvalidArgumentException exception];
end:
[stream retain];
stream = [stream retain];
objc_autoreleasePoolPop(pool);
return [stream autorelease];
}
@end
|
Deleted src/OFGZIPURIHandler.h version [f833858668].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
|
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* 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
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#import "OFURIHandler.h"
OF_ASSUME_NONNULL_BEGIN
@interface OFGZIPURIHandler: OFURIHandler
@end
OF_ASSUME_NONNULL_END
|
Deleted src/OFGZIPURIHandler.m version [623f512984].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
|
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* 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
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFGZIPURIHandler.h"
#import "OFGZIPStream.h"
#import "OFStream.h"
#import "OFURI.h"
#import "OFInvalidArgumentException.h"
@implementation OFGZIPURIHandler
- (OFStream *)openItemAtURI: (OFURI *)URI mode: (OFString *)mode
{
void *pool = objc_autoreleasePoolPush();
OFStream *stream;
if (![URI.scheme isEqual: @"of-gzip"] || URI.host != nil ||
URI.port != nil || URI.user != nil || URI.password != nil ||
URI.query != nil || URI.fragment != nil)
@throw [OFInvalidArgumentException exception];
if (![mode isEqual: @"r"])
@throw [OFInvalidArgumentException exception];
stream = [OFURIHandler openItemAtURI: [OFURI URIWithString: URI.path]
mode: @"r"];
stream = [OFGZIPStream streamWithStream: stream mode: @"r"];
[stream retain];
objc_autoreleasePoolPop(pool);
return [stream autorelease];
}
@end
|
Deleted src/OFLHAURIHandler.h version [4d616ea338].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
|
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* 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
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#import "OFURIHandler.h"
OF_ASSUME_NONNULL_BEGIN
@interface OFLHAURIHandler: OFURIHandler
@end
OF_ASSUME_NONNULL_END
|
Deleted src/OFLHAURIHandler.m version [73373ae419].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
|
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* 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
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#include <errno.h>
#import "OFLHAURIHandler.h"
#import "OFLHAArchive.h"
#import "OFStream.h"
#import "OFURI.h"
#import "OFInvalidArgumentException.h"
#import "OFOpenItemFailedException.h"
@implementation OFLHAURIHandler
- (OFStream *)openItemAtURI: (OFURI *)URI mode: (OFString *)mode
{
void *pool = objc_autoreleasePoolPush();
OFString *percentEncodedPath, *archiveURI, *path;
size_t pos;
OFLHAArchive *archive;
OFLHAArchiveEntry *entry;
if (![URI.scheme isEqual: @"of-lha"] || URI.host != nil ||
URI.port != nil || URI.user != nil || URI.password != nil ||
URI.query != nil || URI.fragment != nil)
@throw [OFInvalidArgumentException exception];
if (![mode isEqual: @"r"])
/*
* Writing has some implications that are not decided yet: Will
* it always append to an archive? What happens if the file
* already exists?
*/
@throw [OFInvalidArgumentException exception];
percentEncodedPath = URI.percentEncodedPath;
pos = [percentEncodedPath rangeOfString: @"!"].location;
if (pos == OFNotFound)
@throw [OFInvalidArgumentException exception];
archiveURI = [percentEncodedPath substringWithRange:
OFMakeRange(0, pos)].stringByRemovingPercentEncoding;
path = [percentEncodedPath substringWithRange:
OFMakeRange(pos + 1, percentEncodedPath.length - pos - 1)]
.stringByRemovingPercentEncoding;
archive = [OFLHAArchive
archiveWithURI: [OFURI URIWithString: archiveURI]
mode: @"r"];
while ((entry = [archive nextEntry]) != nil) {
if ([entry.fileName isEqual: path]) {
OFStream *stream =
[[archive streamForReadingCurrentEntry] retain];
objc_autoreleasePoolPop(pool);
return [stream autorelease];
}
}
@throw [OFOpenItemFailedException exceptionWithURI: URI
mode: mode
errNo: ENOENT];
}
@end
|
Deleted src/OFTarURIHandler.m version [5ef603a03a].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
|
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* 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
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#include <errno.h>
#import "OFTarURIHandler.h"
#import "OFStream.h"
#import "OFTarArchive.h"
#import "OFURI.h"
#import "OFInvalidArgumentException.h"
#import "OFOpenItemFailedException.h"
@implementation OFTarURIHandler
- (OFStream *)openItemAtURI: (OFURI *)URI mode: (OFString *)mode
{
void *pool = objc_autoreleasePoolPush();
OFString *percentEncodedPath, *archiveURI, *path;
size_t pos;
OFTarArchive *archive;
OFTarArchiveEntry *entry;
if (![URI.scheme isEqual: @"of-tar"] || URI.host != nil ||
URI.port != nil || URI.user != nil || URI.password != nil ||
URI.query != nil || URI.fragment != nil)
@throw [OFInvalidArgumentException exception];
if (![mode isEqual: @"r"])
/*
* Writing has some implications that are not decided yet: Will
* it always append to an archive? What happens if the file
* already exists?
*/
@throw [OFInvalidArgumentException exception];
percentEncodedPath = URI.percentEncodedPath;
pos = [percentEncodedPath rangeOfString: @"!"].location;
if (pos == OFNotFound)
@throw [OFInvalidArgumentException exception];
archiveURI = [percentEncodedPath substringWithRange:
OFMakeRange(0, pos)].stringByRemovingPercentEncoding;
path = [percentEncodedPath substringWithRange:
OFMakeRange(pos + 1, percentEncodedPath.length - pos - 1)]
.stringByRemovingPercentEncoding;
archive = [OFTarArchive
archiveWithURI: [OFURI URIWithString: archiveURI]
mode: @"r"];
while ((entry = [archive nextEntry]) != nil) {
if ([entry.fileName isEqual: path]) {
OFStream *stream =
[[archive streamForReadingCurrentEntry] retain];
objc_autoreleasePoolPop(pool);
return [stream autorelease];
}
}
@throw [OFOpenItemFailedException exceptionWithURI: URI
mode: mode
errNo: ENOENT];
}
@end
|
Modified src/OFURIHandler.m
from [9d46a93305]
to [48616dbf01].
︙ | | |
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
+
-
-
-
-
|
#import "OFNumber.h"
#import "OFURI.h"
#ifdef OF_HAVE_THREADS
# import "OFMutex.h"
#endif
#import "OFArchiveURIHandler.h"
#import "OFEmbeddedURIHandler.h"
#ifdef OF_HAVE_FILES
# import "OFFileURIHandler.h"
#endif
#import "OFGZIPURIHandler.h"
#if defined(OF_HAVE_SOCKETS) && defined(OF_HAVE_THREADS)
# import "OFHTTPURIHandler.h"
#endif
#import "OFLHAURIHandler.h"
#import "OFTarURIHandler.h"
#import "OFZIPURIHandler.h"
#import "OFUnsupportedProtocolException.h"
static OFMutableDictionary OF_GENERIC(OFString *, OFURIHandler *) *handlers;
#ifdef OF_HAVE_THREADS
static OFMutex *mutex;
|
︙ | | |
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
-
+
-
-
-
+
+
+
|
#endif
[self registerClass: [OFEmbeddedURIHandler class]
forScheme: @"of-embedded"];
#ifdef OF_HAVE_FILES
[self registerClass: [OFFileURIHandler class] forScheme: @"file"];
#endif
[self registerClass: [OFGZIPURIHandler class] forScheme: @"of-gzip"];
#if defined(OF_HAVE_SOCKETS) && defined(OF_HAVE_THREADS)
[self registerClass: [OFHTTPURIHandler class] forScheme: @"http"];
[self registerClass: [OFHTTPURIHandler class] forScheme: @"https"];
#endif
[self registerClass: [OFArchiveURIHandler class] forScheme: @"of-gzip"];
[self registerClass: [OFLHAURIHandler class] forScheme: @"of-lha"];
[self registerClass: [OFTarURIHandler class] forScheme: @"of-tar"];
[self registerClass: [OFZIPURIHandler class] forScheme: @"of-zip"];
[self registerClass: [OFArchiveURIHandler class] forScheme: @"of-lha"];
[self registerClass: [OFArchiveURIHandler class] forScheme: @"of-tar"];
[self registerClass: [OFArchiveURIHandler class] forScheme: @"of-zip"];
}
+ (bool)registerClass: (Class)class forScheme: (OFString *)scheme
{
#ifdef OF_HAVE_THREADS
[mutex lock];
@try {
|
︙ | | |