summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Freeman (saurik) <saurik@saurik.com>2015-06-25 23:31:19 -0700
committerJay Freeman (saurik) <saurik@saurik.com>2015-06-25 23:31:19 -0700
commit24b9b564be7938eb74faaefaf78eda4637ee0da3 (patch)
tree888ed2e4f8a023cdc4a2c32587169a889e510260
parent54798aa742d1e5183b8cbff6d78d763e0bcb35f0 (diff)
Isolate stash directory from codesign validation.
-rw-r--r--libuicache.mm16
1 files changed, 13 insertions, 3 deletions
diff --git a/libuicache.mm b/libuicache.mm
index 800beb9..0e107f4 100644
--- a/libuicache.mm
+++ b/libuicache.mm
@@ -12,9 +12,19 @@ static NSArray *(*_MIFileManager$urlsForItemsInDirectoryAtURL$ignoringSymlinks$e
static NSArray *$MIFileManager$urlsForItemsInDirectoryAtURL$ignoringSymlinks$error$(MIFileManager *self, SEL _cmd, NSURL *url, BOOL ignoring, NSError *error) {
MIFileManager *manager(reinterpret_cast<MIFileManager *>([$MIFileManager defaultManager]));
- if (NSURL *destiny = [manager destinationOfSymbolicLinkAtURL:url error:NULL])
- url = destiny;
- return _MIFileManager$urlsForItemsInDirectoryAtURL$ignoringSymlinks$error$(self, _cmd, url, NO, error);
+ NSURL *destiny([manager destinationOfSymbolicLinkAtURL:url error:NULL]);
+ if (destiny == nil)
+ return _MIFileManager$urlsForItemsInDirectoryAtURL$ignoringSymlinks$error$(self, _cmd, url, YES, error);
+
+ NSArray *prefix([url pathComponents]);
+ size_t skip([[destiny pathComponents] count]);
+ NSMutableArray *items([NSMutableArray array]);
+ for (NSURL *item in _MIFileManager$urlsForItemsInDirectoryAtURL$ignoringSymlinks$error$(self, _cmd, destiny, YES, error)) {
+ NSArray *components([item pathComponents]);
+ [items addObject:[NSURL fileURLWithPathComponents:[prefix arrayByAddingObjectsFromArray:[components subarrayWithRange:NSMakeRange(skip, [components count] - skip)]]]];
+ }
+
+ return items;
}
__attribute__((__constructor__))