ObjFW  Check-in [6060a03291]

Overview
Comment:Avoid some unnecessary I/O
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 6060a0329199375c74664ecf4526962705cafe88f4c9065fcf15a67f99935403
User & Date: js on 2024-03-10 16:49:00
Other Links: manifest | tags
Context
2024-03-10
18:44
OFIRI: Add methods for path extension check-in: 0ca94307e6 user: js tags: trunk
16:49
Avoid some unnecessary I/O check-in: 6060a03291 user: js tags: trunk
16:29
Add a note about ABI stability of ObjFWTest check-in: b60ab363c6 user: js tags: trunk
Changes

Modified src/OFData.m from [236ab0e955] to [e46674d159].

265
266
267
268
269
270
271
272

273
274
275
276
277
278
279
265
266
267
268
269
270
271

272
273
274
275
276
277
278
279







-
+







#ifdef OF_HAVE_FILES
- (instancetype)initWithContentsOfFile: (OFString *)path
{
	void *pool = objc_autoreleasePoolPush();
	OFIRI *IRI;

	@try {
		IRI = [OFIRI fileIRIWithPath: path];
		IRI = [OFIRI fileIRIWithPath: path isDirectory: false];
	} @catch (id e) {
		[self release];
		@throw e;
	}

	self = [self initWithContentsOfIRI: IRI];

Modified src/OFFileManager.m from [0ef3517469] to [1db2f56a17].

212
213
214
215
216
217
218
219


220
221
222
223
224
225
226
212
213
214
215
216
217
218

219
220
221
222
223
224
225
226
227







-
+
+







}

- (OFIRI *)currentDirectoryIRI
{
	void *pool = objc_autoreleasePoolPush();
	OFIRI *ret;

	ret = [OFIRI fileIRIWithPath: self.currentDirectoryPath];
	ret = [OFIRI fileIRIWithPath: self.currentDirectoryPath
			 isDirectory: true];
	ret = [ret retain];

	objc_autoreleasePoolPop(pool);
	return [ret autorelease];
}
#endif

239
240
241
242
243
244
245
246


247
248
249
250
251
252
253
240
241
242
243
244
245
246

247
248
249
250
251
252
253
254
255







-
+
+








#ifdef OF_HAVE_FILES
- (OFFileAttributes)attributesOfItemAtPath: (OFString *)path
{
	void *pool = objc_autoreleasePoolPush();
	OFFileAttributes ret;

	ret = [self attributesOfItemAtIRI: [OFIRI fileIRIWithPath: path]];
	ret = [self attributesOfItemAtIRI: [OFIRI fileIRIWithPath: path
						      isDirectory: false]];
	ret = [ret retain];

	objc_autoreleasePoolPop(pool);

	return [ret autorelease];
}
#endif
267
268
269
270
271
272
273
274

275
276
277
278
279
280
281
269
270
271
272
273
274
275

276
277
278
279
280
281
282
283







-
+








#ifdef OF_HAVE_FILES
- (void)setAttributes: (OFFileAttributes)attributes
	 ofItemAtPath: (OFString *)path
{
	void *pool = objc_autoreleasePoolPush();
	[self setAttributes: attributes
		ofItemAtIRI: [OFIRI fileIRIWithPath: path]];
		ofItemAtIRI: [OFIRI fileIRIWithPath: path isDirectory: false]];
	objc_autoreleasePoolPop(pool);
}
#endif

- (bool)fileExistsAtIRI: (OFIRI *)IRI
{
	OFIRIHandler *IRIHandler;
291
292
293
294
295
296
297
298


299
300
301
302
303
304
305
293
294
295
296
297
298
299

300
301
302
303
304
305
306
307
308







-
+
+








#ifdef OF_HAVE_FILES
- (bool)fileExistsAtPath: (OFString *)path
{
	void *pool = objc_autoreleasePoolPush();
	bool ret;

	ret = [self fileExistsAtIRI: [OFIRI fileIRIWithPath: path]];
	ret = [self fileExistsAtIRI: [OFIRI fileIRIWithPath: path
						isDirectory: false]];

	objc_autoreleasePoolPop(pool);

	return ret;
}
#endif

318
319
320
321
322
323
324
325


326
327
328
329
330
331
332
321
322
323
324
325
326
327

328
329
330
331
332
333
334
335
336







-
+
+








#ifdef OF_HAVE_FILES
- (bool)directoryExistsAtPath: (OFString *)path
{
	void *pool = objc_autoreleasePoolPush();
	bool ret;

	ret = [self directoryExistsAtIRI: [OFIRI fileIRIWithPath: path]];
	ret = [self directoryExistsAtIRI: [OFIRI fileIRIWithPath: path
						     isDirectory: true]];

	objc_autoreleasePoolPop(pool);

	return ret;
}
#endif

435
436
437
438
439
440
441
442


443
444
445
446
447
448
449
450
451
452


453
454
455
456
457
458
459
439
440
441
442
443
444
445

446
447
448
449
450
451
452
453
454
455
456

457
458
459
460
461
462
463
464
465







-
+
+









-
+
+







}

#ifdef OF_HAVE_FILES
- (void)createDirectoryAtPath: (OFString *)path
{
	void *pool = objc_autoreleasePoolPush();

	[self createDirectoryAtIRI: [OFIRI fileIRIWithPath: path]];
	[self createDirectoryAtIRI: [OFIRI fileIRIWithPath: path
					       isDirectory: true]];

	objc_autoreleasePoolPop(pool);
}

- (void)createDirectoryAtPath: (OFString *)path
		createParents: (bool)createParents
{
	void *pool = objc_autoreleasePoolPush();

	[self createDirectoryAtIRI: [OFIRI fileIRIWithPath: path]
	[self createDirectoryAtIRI: [OFIRI fileIRIWithPath: path
					       isDirectory: true]
		     createParents: createParents];

	objc_autoreleasePoolPop(pool);
}
#endif

- (OFArray OF_GENERIC(OFIRI *) *)contentsOfDirectoryAtIRI: (OFIRI *)IRI
472
473
474
475
476
477
478
479


480
481
482
483
484
485
486
478
479
480
481
482
483
484

485
486
487
488
489
490
491
492
493







-
+
+







#ifdef OF_HAVE_FILES
- (OFArray OF_GENERIC(OFString *) *)contentsOfDirectoryAtPath: (OFString *)path
{
	void *pool = objc_autoreleasePoolPush();
	OFArray OF_GENERIC(OFIRI *) *IRIs;
	OFMutableArray OF_GENERIC(OFString *) *ret;

	IRIs = [self contentsOfDirectoryAtIRI: [OFIRI fileIRIWithPath: path]];
	IRIs = [self contentsOfDirectoryAtIRI: [OFIRI fileIRIWithPath: path
							  isDirectory: true]];
	ret = [OFMutableArray arrayWithCapacity: IRIs.count];

	for (OFIRI *IRI in IRIs)
		[ret addObject: IRI.lastPathComponent];

	[ret makeImmutable];
	ret = [ret retain];
585
586
587
588
589
590
591
592
593




594
595
596
597
598
599
600
592
593
594
595
596
597
598


599
600
601
602
603
604
605
606
607
608
609







-
-
+
+
+
+







	objc_autoreleasePoolPop(pool);
}

- (void)copyItemAtPath: (OFString *)source toPath: (OFString *)destination
{
	void *pool = objc_autoreleasePoolPush();

	[self copyItemAtIRI: [OFIRI fileIRIWithPath: source]
		      toIRI: [OFIRI fileIRIWithPath: destination]];
	[self copyItemAtIRI: [OFIRI fileIRIWithPath: source
					isDirectory: false]
		      toIRI: [OFIRI fileIRIWithPath: destination
					isDirectory: false]];

	objc_autoreleasePoolPop(pool);
}
#endif

- (void)copyItemAtIRI: (OFIRI *)source toIRI: (OFIRI *)destination
{
772
773
774
775
776
777
778
779
780




781
782
783
784
785
786
787
781
782
783
784
785
786
787


788
789
790
791
792
793
794
795
796
797
798







-
-
+
+
+
+







	objc_autoreleasePoolPop(pool);
}

#ifdef OF_HAVE_FILES
- (void)moveItemAtPath: (OFString *)source toPath: (OFString *)destination
{
	void *pool = objc_autoreleasePoolPush();
	[self moveItemAtIRI: [OFIRI fileIRIWithPath: source]
		      toIRI: [OFIRI fileIRIWithPath: destination]];
	[self moveItemAtIRI: [OFIRI fileIRIWithPath: source
					isDirectory: false]
		      toIRI: [OFIRI fileIRIWithPath: destination
					isDirectory: false]];
	objc_autoreleasePoolPop(pool);
}
#endif

- (void)moveItemAtIRI: (OFIRI *)source toIRI: (OFIRI *)destination
{
	void *pool;
846
847
848
849
850
851
852
853


854
855
856
857
858
859
860
857
858
859
860
861
862
863

864
865
866
867
868
869
870
871
872







-
+
+







	[IRIHandler removeItemAtIRI: IRI];
}

#ifdef OF_HAVE_FILES
- (void)removeItemAtPath: (OFString *)path
{
	void *pool = objc_autoreleasePoolPush();
	[self removeItemAtIRI: [OFIRI fileIRIWithPath: path]];
	[self removeItemAtIRI: [OFIRI fileIRIWithPath: path
					  isDirectory: false]];
	objc_autoreleasePoolPop(pool);
}
#endif

- (void)linkItemAtIRI: (OFIRI *)source toIRI: (OFIRI *)destination
{
	void *pool = objc_autoreleasePoolPush();
877
878
879
880
881
882
883
884
885




886
887
888
889
890
891
892
889
890
891
892
893
894
895


896
897
898
899
900
901
902
903
904
905
906







-
-
+
+
+
+







	objc_autoreleasePoolPop(pool);
}

#ifdef OF_FILE_MANAGER_SUPPORTS_LINKS
- (void)linkItemAtPath: (OFString *)source toPath: (OFString *)destination
{
	void *pool = objc_autoreleasePoolPush();
	[self linkItemAtIRI: [OFIRI fileIRIWithPath: source]
		      toIRI: [OFIRI fileIRIWithPath: destination]];
	[self linkItemAtIRI: [OFIRI fileIRIWithPath: source
					isDirectory: false]
		      toIRI: [OFIRI fileIRIWithPath: destination
					isDirectory: false]];
	objc_autoreleasePoolPop(pool);
}
#endif

- (void)createSymbolicLinkAtIRI: (OFIRI *)IRI
	    withDestinationPath: (OFString *)target
{
907
908
909
910
911
912
913
914


915
916
917
918
919
920
921
921
922
923
924
925
926
927

928
929
930
931
932
933
934
935
936







-
+
+







}

#ifdef OF_FILE_MANAGER_SUPPORTS_SYMLINKS
- (void)createSymbolicLinkAtPath: (OFString *)path
	     withDestinationPath: (OFString *)target
{
	void *pool = objc_autoreleasePoolPush();
	[self createSymbolicLinkAtIRI: [OFIRI fileIRIWithPath: path]
	[self createSymbolicLinkAtIRI: [OFIRI fileIRIWithPath: path
						  isDirectory: false]
		  withDestinationPath: target];
	objc_autoreleasePoolPop(pool);
}
#endif

- (OFData *)extendedAttributeDataForName: (OFString *)name
			     ofItemAtIRI: (OFIRI *)IRI
936
937
938
939
940
941
942
943


944
945
946
947
948
949
950
951
952
953
954
955
956
957

958
959
960
961
962
963
964
965
966







-
+
+







			    ofItemAtPath: (OFString *)path
{
	void *pool = objc_autoreleasePoolPush();
	OFData *ret;

	ret = [self
	    extendedAttributeDataForName: name
			     ofItemAtIRI: [OFIRI fileIRIWithPath: path]];
			     ofItemAtIRI: [OFIRI fileIRIWithPath: path
						     isDirectory: false]];
	ret = [ret retain];

	objc_autoreleasePoolPop(pool);

	return [ret autorelease];
}
#endif
970
971
972
973
974
975
976
977


978
979
980
981
982
983
984
986
987
988
989
990
991
992

993
994
995
996
997
998
999
1000
1001







-
+
+







- (void)setExtendedAttributeData: (OFData *)data
			 forName: (OFString *)name
		    ofItemAtPath: (OFString *)path
{
	void *pool = objc_autoreleasePoolPush();
	[self setExtendedAttributeData: data
			       forName: name
			   ofItemAtIRI: [OFIRI fileIRIWithPath: path]];
			   ofItemAtIRI: [OFIRI fileIRIWithPath: path
						   isDirectory: false]];
	objc_autoreleasePoolPop(pool);
}
#endif

- (void)removeExtendedAttributeForName: (OFString *)name
			   ofItemAtIRI: (OFIRI *)IRI
{
995
996
997
998
999
1000
1001
1002


1003
1004
1005
1006
1007
1008
1009
1012
1013
1014
1015
1016
1017
1018

1019
1020
1021
1022
1023
1024
1025
1026
1027







-
+
+








#ifdef OF_FILE_MANAGER_SUPPORTS_EXTENDED_ATTRIBUTES
- (void)removeExtendedAttributeForName: (OFString *)name
			  ofItemAtPath: (OFString *)path
{
	void *pool = objc_autoreleasePoolPush();
	[self removeExtendedAttributeForName: name
				 ofItemAtIRI: [OFIRI fileIRIWithPath: path]];
				 ofItemAtIRI: [OFIRI fileIRIWithPath: path
							 isDirectory: false]];
	objc_autoreleasePoolPop(pool);
}
#endif
@end

@implementation OFDefaultFileManager
OF_SINGLETON_METHODS

Modified src/OFString.m from [fd5aa1a3b0] to [1a3f564904].

994
995
996
997
998
999
1000
1001

1002
1003
1004
1005
1006
1007
1008
994
995
996
997
998
999
1000

1001
1002
1003
1004
1005
1006
1007
1008







-
+







- (instancetype)initWithContentsOfFile: (OFString *)path
			      encoding: (OFStringEncoding)encoding
{
	void *pool = objc_autoreleasePoolPush();
	OFIRI *IRI;

	@try {
		IRI = [OFIRI fileIRIWithPath: path];
		IRI = [OFIRI fileIRIWithPath: path isDirectory: false];
	} @catch (id e) {
		[self release];
		@throw e;
	}

	self = [self initWithContentsOfIRI: IRI encoding: encoding];