︙ | | | ︙ | |
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
{
self = [super init];
@try {
_stream = [stream retain];
if ([mode isEqual: @"r"])
_mode = OF_TAR_ARCHIVE_MODE_READ;
else if ([mode isEqual: @"w"])
_mode = OF_TAR_ARCHIVE_MODE_WRITE;
else if ([mode isEqual: @"a"])
_mode = OF_TAR_ARCHIVE_MODE_APPEND;
else
@throw [OFInvalidArgumentException exception];
if (_mode == OF_TAR_ARCHIVE_MODE_APPEND) {
uint32_t buffer[1024 / sizeof(uint32_t)];
bool empty = true;
if (![_stream isKindOfClass: [OFSeekableStream class]])
@throw [OFInvalidArgumentException exception];
[(OFSeekableStream *)_stream seekToOffset: -1024
|
|
|
|
|
|
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
{
self = [super init];
@try {
_stream = [stream retain];
if ([mode isEqual: @"r"])
_mode = OFTarArchiveModeRead;
else if ([mode isEqual: @"w"])
_mode = OFTarArchiveModeWrite;
else if ([mode isEqual: @"a"])
_mode = OFTarArchiveModeAppend;
else
@throw [OFInvalidArgumentException exception];
if (_mode == OFTarArchiveModeAppend) {
uint32_t buffer[1024 / sizeof(uint32_t)];
bool empty = true;
if (![_stream isKindOfClass: [OFSeekableStream class]])
@throw [OFInvalidArgumentException exception];
[(OFSeekableStream *)_stream seekToOffset: -1024
|
︙ | | | ︙ | |
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
- (OFTarArchiveEntry *)nextEntry
{
OFTarArchiveEntry *entry;
uint32_t buffer[512 / sizeof(uint32_t)];
bool empty = true;
if (_mode != OF_TAR_ARCHIVE_MODE_READ)
@throw [OFInvalidArgumentException exception];
[(OFTarArchiveFileReadStream *)_lastReturnedStream of_skip];
@try {
[_lastReturnedStream close];
} @catch (OFNotOpenException *e) {
/* Might have already been closed by the user - that's fine. */
|
|
|
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
- (OFTarArchiveEntry *)nextEntry
{
OFTarArchiveEntry *entry;
uint32_t buffer[512 / sizeof(uint32_t)];
bool empty = true;
if (_mode != OFTarArchiveModeRead)
@throw [OFInvalidArgumentException exception];
[(OFTarArchiveFileReadStream *)_lastReturnedStream of_skip];
@try {
[_lastReturnedStream close];
} @catch (OFNotOpenException *e) {
/* Might have already been closed by the user - that's fine. */
|
︙ | | | ︙ | |
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
entry: entry];
return entry;
}
- (OFStream *)streamForReadingCurrentEntry
{
if (_mode != OF_TAR_ARCHIVE_MODE_READ)
@throw [OFInvalidArgumentException exception];
if (_lastReturnedStream == nil)
@throw [OFInvalidArgumentException exception];
return [[(OFTarArchiveFileReadStream *)_lastReturnedStream
retain] autorelease];
}
- (OFStream *)streamForWritingEntry: (OFTarArchiveEntry *)entry
{
void *pool;
if (_mode != OF_TAR_ARCHIVE_MODE_WRITE &&
_mode != OF_TAR_ARCHIVE_MODE_APPEND)
@throw [OFInvalidArgumentException exception];
pool = objc_autoreleasePoolPush();
@try {
[_lastReturnedStream close];
} @catch (OFNotOpenException *e) {
|
|
|
<
|
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
|
entry: entry];
return entry;
}
- (OFStream *)streamForReadingCurrentEntry
{
if (_mode != OFTarArchiveModeRead)
@throw [OFInvalidArgumentException exception];
if (_lastReturnedStream == nil)
@throw [OFInvalidArgumentException exception];
return [[(OFTarArchiveFileReadStream *)_lastReturnedStream
retain] autorelease];
}
- (OFStream *)streamForWritingEntry: (OFTarArchiveEntry *)entry
{
void *pool;
if (_mode != OFTarArchiveModeWrite && _mode != OFTarArchiveModeAppend)
@throw [OFInvalidArgumentException exception];
pool = objc_autoreleasePoolPush();
@try {
[_lastReturnedStream close];
} @catch (OFNotOpenException *e) {
|
︙ | | | ︙ | |
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
|
[_lastReturnedStream close];
} @catch (OFNotOpenException *e) {
/* Might have already been closed by the user - that's fine. */
}
[_lastReturnedStream release];
_lastReturnedStream = nil;
if (_mode == OF_TAR_ARCHIVE_MODE_WRITE ||
_mode == OF_TAR_ARCHIVE_MODE_APPEND) {
char buffer[1024];
memset(buffer, '\0', 1024);
[_stream writeBuffer: buffer
length: 1024];
}
[_stream release];
_stream = nil;
}
@end
|
|
<
|
<
|
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
|
[_lastReturnedStream close];
} @catch (OFNotOpenException *e) {
/* Might have already been closed by the user - that's fine. */
}
[_lastReturnedStream release];
_lastReturnedStream = nil;
if (_mode == OFTarArchiveModeWrite || _mode == OFTarArchiveModeAppend) {
char buffer[1024];
memset(buffer, '\0', 1024);
[_stream writeBuffer: buffer length: 1024];
}
[_stream release];
_stream = nil;
}
@end
|
︙ | | | ︙ | |