-
Notifications
You must be signed in to change notification settings - Fork 1
/
NSURL+TLExtensions.m
90 lines (75 loc) · 2.42 KB
/
NSURL+TLExtensions.m
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
82
83
84
85
86
87
88
89
90
//
// NSURL+TLExtensions.m
// Geotagalog
//
// Created by Nathan Vander Wilt on 9/26/09.
// Copyright 2009 __MyCompanyName__. All rights reserved.
//
#import "NSURL+TLExtensions.h"
@implementation NSURL (TLStringFeatures)
- (NSString*)tl_pathExtension {
return [[self path] pathExtension];
}
- (NSURL*)tl_URLByDeletingPathExtension {
NSString* newPath = [[self path] stringByDeletingPathExtension];
NSURL* newURL = [[NSURL alloc] initWithScheme:[self scheme]
host:[self host]
path:newPath];
return [newURL autorelease];
}
- (NSString*)tl_lastPathComponent {
return [[self path] lastPathComponent];
}
- (NSURL*)tl_URLByDeletingLastPathComponent {
NSString* newPath = [[self path] stringByDeletingLastPathComponent];
NSURL* newURL = [[NSURL alloc] initWithScheme:[self scheme]
host:[self host]
path:newPath];
return [newURL autorelease];
}
- (NSURL*)tl_URLByAppendingPathComponent:(NSString*)pathComponent {
NSString* newPath = [[self path] stringByAppendingPathComponent:pathComponent];
NSURL* newURL = [[NSURL alloc] initWithScheme:[self scheme]
host:[self host]
path:newPath];
return [newURL autorelease];
}
- (const char*)tl_fileSystemRepresentation {
return [[self path] fileSystemRepresentation];
}
@end
@implementation NSURL (TLAliasAdditions)
+ (NSURL*)tl_urlByResolvingAliasFile:(NSURL*)aliasFileURL error:(NSError**)err {
FSRef aliasFileRef = {};
Boolean success = CFURLGetFSRef((CFURLRef)aliasFileURL, &aliasFileRef);
if (!success) {
if (err) {
NSDictionary* errInfo = [NSDictionary dictionaryWithObjectsAndKeys:
aliasFileURL, NSURLErrorKey, nil];
*err = [NSError errorWithDomain:NSPOSIXErrorDomain code:ENOENT userInfo:errInfo];
}
return nil;
}
Boolean wasAliased = false;
Boolean targetIsFolder = false;
OSErr resolveErr = FSResolveAliasFileWithMountFlags(&aliasFileRef,
true, &targetIsFolder, &wasAliased,
kResolveAliasFileNoUI);
(void)targetIsFolder;
if (resolveErr) {
if (err) {
NSDictionary* errInfo = [NSDictionary dictionaryWithObjectsAndKeys:
aliasFileURL, NSURLErrorKey, nil];
*err = [NSError errorWithDomain:NSOSStatusErrorDomain code:resolveErr userInfo:errInfo];
}
return nil;
}
if (wasAliased) {
CFURLRef resolvedAlias = CFURLCreateFromFSRef(kCFAllocatorDefault, &aliasFileRef);
return [(NSURL*)resolvedAlias autorelease];
}
else {
return aliasFileURL;
}
}
@end