ObjFW  Check-in [57551c2e32]

Overview
Comment:ofzip: Do not skip over directory type tar entries

Previously, directories were only created as soon as there is a file in
them.

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 57551c2e32e96a23826e08922d16658ea84d75fa1864dcc20d1416cf266a8a7a
User & Date: js on 2017-10-07 08:21:37
Other Links: manifest | tags
Context
2017-10-07
10:46
OFThread: Fix setting the name on the wrong thread check-in: 1494d3f6f1 user: js tags: trunk
08:21
ofzip: Do not skip over directory type tar entries check-in: 57551c2e32 user: js tags: trunk
2017-10-05
21:19
OFStdIOStream_Win32Console: Fix wrong return check-in: 46ebdddf8f user: js tags: trunk
Changes

Modified utils/ofzip/TarArchive.m from [45466f7ad4] to [e256d7b4a3].

246
247
248
249
250
251
252

253
254
255
256
257
258
259
260
261
262
263
264


265
266
267
268
269
270
271
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264

265
266
267
268
269
270
271
272
273







+











-
+
+







	OFMutableSet OF_GENERIC(OFString *) *missing =
	    [OFMutableSet setWithArray: files];
	OFTarArchiveEntry *entry;

	while ((entry = [_archive nextEntry]) != nil) {
		void *pool = objc_autoreleasePoolPush();
		OFString *fileName = [entry fileName];
		of_tar_archive_entry_type_t type = [entry type];
		OFString *outFileName = [fileName stringByStandardizingPath];
		OFArray OF_GENERIC(OFString *) *pathComponents;
		OFString *directory;
		OFFile *output;
		OFStream *stream;
		uint64_t written = 0, size = [entry size];
		int8_t percent = -1, newPercent;

		if (!all && ![files containsObject: fileName])
			continue;

		if ([entry type] != OF_TAR_ARCHIVE_ENTRY_TYPE_FILE) {
		if (type != OF_TAR_ARCHIVE_ENTRY_TYPE_FILE &&
		    type != OF_TAR_ARCHIVE_ENTRY_TYPE_DIRECTORY) {
			if (app->_outputLevel >= 0)
				[of_stdout writeLine: OF_LOCALIZED(
				    @"skipping_file",
				    @"Skipping %[file]...",
				    @"file", fileName)];
			continue;
		}
302
303
304
305
306
307
308


309

310
311
312
313
314
315
316
304
305
306
307
308
309
310
311
312

313
314
315
316
317
318
319
320







+
+
-
+







		outFileName = [OFString pathWithComponents: pathComponents];

		if (app->_outputLevel >= 0)
			[of_stdout writeString: OF_LOCALIZED(@"extracting_file",
			    @"Extracting %[file]...",
			    @"file", fileName)];

		if (type == OF_TAR_ARCHIVE_ENTRY_TYPE_DIRECTORY ||
		    (type == OF_TAR_ARCHIVE_ENTRY_TYPE_FILE &&
		if ([fileName hasSuffix: @"/"]) {
		    [fileName hasSuffix: @"/"])) {
			[fileManager createDirectoryAtPath: outFileName
					     createParents: true];
			setPermissions(outFileName, entry);

			if (app->_outputLevel >= 0) {
				[of_stdout writeString: @"\r"];
				[of_stdout writeLine: OF_LOCALIZED(