Loading...
framework/AtlasCache.swift dyld-1340 /dev/null
--- dyld/dyld-1340/framework/AtlasCache.swift
+++ /dev/null
@@ -1,136 +0,0 @@
-/* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*- vim: ft=cpp et ts=4 sw=4:
- *
- * Copyright (c) 2023 Apple Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- *
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- *
- * @APPLE_LICENSE_HEADER_END@
- */
-
-import os
-import System
-@_implementationOnly import Dyld_Internal
-
-@available(macOS 13.0, *)
-struct AtlasCache {
-    var uuidMap = [UUID : BPList.UnsafeRawDictionary]()
-    var pathMap = [String : BPList.UnsafeRawDictionary]()
-    var buffers = [Data]()
-    let lock = OSAllocatedUnfairLock()
-    mutating func getCachePlist(uuid: UUID?, path: FilePath?, forceScavenge: Bool) -> BPList.UnsafeRawDictionary? {
-        return try? lock.withLockUnchecked { () -> BPList.UnsafeRawDictionary? in
-            //FIXME: Delegate support
-            if let uuid, let result = uuidMap[uuid] {
-                return result
-            }
-            guard let path else {
-                return nil
-            }
-            if !forceScavenge, let result = pathMap[path.string] {
-                return result
-            }
-            guard let atlasFileName = path.lastComponent?.stem.appending(".atlas") else {
-                return  nil
-            }
-            var embeddedData = try? Data(contentsOf:URL(fileURLWithPath:path.removingLastComponent().appending(atlasFileName).string), options:.mappedIfSafe)
-            var scavengedData: Data? = nil
-            if forceScavenge || embeddedData == nil {
-                embeddedData = nil
-                var scavengedBufferSize = UInt64(0)
-                if let scavegedBuffer =  scavengeCache(path.string, &scavengedBufferSize) {
-                    scavengedData = Data(bytesNoCopy:scavegedBuffer, count:Int(scavengedBufferSize), deallocator:.free)
-                }
-            }
-            let data = embeddedData ?? scavengedData
-            guard let data else { return nil }
-            buffers.append(data)
-            var archive  = try AARDecoder(data:data)
-            let archivePath = uuid?.cacheAtlasArchivePath ?? "caches/names/\(path.lastComponent!.string).plist"
-            guard let plistData = try? archive.data(path: archivePath),
-                  let atlasesDict = try? BPList(data:plistData).asDictionary(),
-                  let byNameDict = try atlasesDict[.string("names")]?.asDictionary(),
-                  let byUuidDict = try atlasesDict[.string("uuids")]?.asDictionary() else {
-                return nil
-            }
-            var skipValidation = false
-            if scavengedData == nil {
-                for prefix in SharedCache.sharedCachePaths {
-                    if path.string.hasPrefix(prefix) {
-                        // The shared cache is coming from snapshot protected storage, skip validation
-                        skipValidation = true
-                        break
-                    }
-                }
-            }
-            if !skipValidation {
-                do {
-                    for (_,atlas) in byNameDict {
-                        guard let atlasDict = try? atlas.asDictionary() else {
-                            throw AtlasError.placeHolder
-                        }
-                        try SharedCache.Impl.validate(bplist:atlasDict)
-                    }
-                    for (_,atlas) in byUuidDict {
-                        guard let atlasDict = try? atlas.asDictionary() else {
-                            throw AtlasError.placeHolder
-                        }
-                        try SharedCache.Impl.validate(bplist:atlasDict)
-                    }
-                } catch {
-                    return nil
-                }
-            }
-            for (key,atlas) in byUuidDict {
-                guard let atlasUUID = UUID(uuidString: key.asString()) else {
-                    continue
-                }
-                if uuidMap[atlasUUID] == nil {
-                    uuidMap[atlasUUID] = try! atlas.asDictionary()
-                }
-            }
-            let dirname = path.removingLastComponent()
-            for (atlasName,atlas) in byNameDict {
-                let fullPath = dirname.appending(atlasName.asString()).string
-                let atlasDict = try! atlas.asDictionary()
-                if pathMap[fullPath] == nil {
-                    pathMap[fullPath] = atlasDict
-                }
-            }
-            if let uuid {
-                return uuidMap[uuid]
-            }
-            return pathMap[path.string]
-        }
-    }
-}
-
-@available(macOS 13.0, *)
-fileprivate var bufferCache = AtlasCache()
-
-internal extension Snapshot {
-    static func findCacheBPlist(uuid: UUID?, path: FilePath?, forceScavenge: Bool = false) -> BPList.UnsafeRawDictionary? {
-        if #available(macOS 13.0, *) {
-            guard let plist = bufferCache.getCachePlist(uuid:uuid, path:path, forceScavenge:forceScavenge) else {
-                return nil
-            }
-            return plist
-        } else {
-            fatalError("This is not supported for backdeployment, but needs to build with a reduced minOS in some environments")
-        }
-    }
-}