ObjFW  Diff

Differences From Artifact [83f99ecd82]:

  • File utils/ofarc/ZIPArchive.m — part of check-in [63caea2ec6] at 2025-04-16 00:07:52 on branch trunk — Finish migrating to the ARC functions for RR (user: js size: 15284) [more...]

To Artifact [ca8e522578]:

  • File utils/ofarc/ZIPArchive.m — part of check-in [a99ff85e42] at 2025-06-14 22:49:05 on branch trunk — ofarc: Handle Ctrl-C on AmigaOS (user: js size: 15491)

173
174
175
176
177
178
179


180
181
182
183
184
185
186
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188







+
+







		    stringByReplacingOccurrencesOfString: @"\n"
					      withString: @"\n\t"]];
		[OFStdOut writeLine: @""];
	}

	for (OFZIPArchiveEntry *entry in _archive.entries) {
		void *pool = objc_autoreleasePoolPush();

		[app checkForCancellation];

		[OFStdOut writeLine: entry.fileName];

		if (app->_outputLevel >= 1) {
			OFString *compressedSize = [OFString
			    stringWithFormat: @"%" PRIu64,
					      entry.compressedSize];
310
311
312
313
314
315
316


317
318
319
320
321
322
323
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327







+
+







		void *pool = objc_autoreleasePoolPush();
		OFString *fileName = entry.fileName;
		OFString *outFileName, *directory;
		OFStream *stream;
		OFFile *output;
		unsigned long long written = 0, size = entry.uncompressedSize;
		int8_t percent = -1, newPercent;

		[app checkForCancellation];

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

		[missing removeObject: fileName];

		outFileName = [app safeLocalPathForPath: fileName];
369
370
371
372
373
374
375




376
377
378



379
380
381
382
383
384
385
373
374
375
376
377
378
379
380
381
382
383



384
385
386
387
388
389
390
391
392
393







+
+
+
+
-
-
-
+
+
+







			goto outer_loop_end;

		stream = [_archive streamForReadingFile: fileName];
		output = [OFFile fileWithPath: outFileName mode: @"w"];
		setPermissions(outFileName, entry);

		while (!stream.atEndOfStream) {
			ssize_t length;

			[app checkForCancellation];

			ssize_t length = [app copyBlockFromStream: stream
							 toStream: output
							 fileName: fileName];
			length = [app copyBlockFromStream: stream
						 toStream: output
						 fileName: fileName];

			if (length < 0) {
				app->_exitStatus = 1;
				goto outer_loop_end;
			}

			written += length;
455
456
457
458
459
460
461




462
463
464



465
466
467
468
469
470
471
463
464
465
466
467
468
469
470
471
472
473



474
475
476
477
478
479
480
481
482
483







+
+
+
+
-
-
-
+
+
+







				continue;
			}

			@throw e;
		}

		while (!stream.atEndOfStream) {
			ssize_t length;

			[app checkForCancellation];

			ssize_t length = [app copyBlockFromStream: stream
							 toStream: OFStdOut
							 fileName: path];
			length = [app copyBlockFromStream: stream
						 toStream: OFStdOut
						 fileName: path];

			if (length < 0) {
				app->_exitStatus = 1;
				return;
			}
		}

485
486
487
488
489
490
491


492
493
494
495
496
497
498
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512







+
+







		OFArray OF_GENERIC (OFString *) *components;
		OFString *fileName;
		OFFileAttributes attributes;
		bool isDirectory = false;
		OFMutableZIPArchiveEntry *entry;
		unsigned long long size;
		OFStream *output;

		[app checkForCancellation];

		components = localFileName.pathComponents;
		fileName = [components componentsJoinedByString: @"/"];

		attributes = [fileManager
		    attributesOfItemAtPath: localFileName];

524
525
526
527
528
529
530
531
532
533
534







535
536
537
538
539
540
541
538
539
540
541
542
543
544




545
546
547
548
549
550
551
552
553
554
555
556
557
558







-
-
-
-
+
+
+
+
+
+
+







			unsigned long long written = 0;
			int8_t percent = -1, newPercent;

			OFFile *input = [OFFile fileWithPath: fileName
							mode: @"r"];

			while (!input.atEndOfStream) {
				ssize_t length = [app
				    copyBlockFromStream: input
					       toStream: output
					       fileName: fileName];
				ssize_t length;

				[app checkForCancellation];

				length = [app copyBlockFromStream: input
							 toStream: output
							 fileName: fileName];

				if (length < 0) {
					app->_exitStatus = 1;
					goto outer_loop_end;
				}

				written += length;