react-native-windows 0.85.0-preview.1 → 0.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Directory.Build.props +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +28 -46
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +0 -3
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +19 -13
- package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +107 -0
- package/Microsoft.ReactNative/Fabric/Composition/SelectionItemAutomationEvent.h +73 -0
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +105 -32
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +7 -2
- package/PropertySheets/CIBuildOptimizations.props +2 -2
- package/PropertySheets/Generated/PackageVersion.g.props +2 -2
- package/PropertySheets/JSEngine.props +1 -1
- package/PropertySheets/NuGet.LockFile.props +2 -9
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +54 -5
- package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
- package/Scripts/creaternwapp.cmd +29 -9
- package/Scripts/creaternwlib.cmd +31 -15
- package/external/.clang-format +1 -0
- package/external/External.vcxitems +10 -0
- package/external/fast-float/.syncignore +10 -0
- package/external/fast-float/LICENSE-APACHE +190 -0
- package/external/fast-float/LICENSE-BOOST +23 -0
- package/external/fast-float/LICENSE-MIT +27 -0
- package/external/fast-float/README.md +545 -0
- package/external/fast-float/cgmanifest.json +15 -0
- package/external/fast-float/fast-float.vcxitems +14 -0
- package/external/fast-float/include/fast_float/ascii_number.h +588 -0
- package/external/fast-float/include/fast_float/bigint.h +638 -0
- package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
- package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
- package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
- package/external/fast-float/include/fast_float/fast_float.h +59 -0
- package/external/fast-float/include/fast_float/fast_table.h +708 -0
- package/external/fast-float/include/fast_float/float_common.h +1240 -0
- package/external/fast-float/include/fast_float/parse_number.h +399 -0
- package/external/fast-float/sync-config.json +8 -0
- package/external/fmt/.syncignore +10 -0
- package/external/fmt/CONTRIBUTING.md +20 -0
- package/external/fmt/LICENSE +27 -0
- package/external/fmt/README.md +484 -0
- package/external/fmt/cgmanifest.json +15 -0
- package/external/fmt/doc/ChangeLog-old.md +3290 -0
- package/external/fmt/doc/api.md +650 -0
- package/external/fmt/doc/fmt.css +61 -0
- package/external/fmt/doc/fmt.js +4 -0
- package/external/fmt/doc/get-started.md +222 -0
- package/external/fmt/doc/index.md +151 -0
- package/external/fmt/doc/perf.svg +1 -0
- package/external/fmt/doc/python-license.txt +290 -0
- package/external/fmt/doc/syntax.md +887 -0
- package/external/fmt/fmt.vcxitems +28 -0
- package/external/fmt/include/fmt/args.h +228 -0
- package/external/fmt/include/fmt/base.h +3077 -0
- package/external/fmt/include/fmt/chrono.h +2432 -0
- package/external/fmt/include/fmt/color.h +612 -0
- package/external/fmt/include/fmt/compile.h +529 -0
- package/external/fmt/include/fmt/core.h +5 -0
- package/external/fmt/include/fmt/format-inl.h +1928 -0
- package/external/fmt/include/fmt/format.h +4427 -0
- package/external/fmt/include/fmt/os.h +439 -0
- package/external/fmt/include/fmt/ostream.h +211 -0
- package/external/fmt/include/fmt/printf.h +656 -0
- package/external/fmt/include/fmt/ranges.h +882 -0
- package/external/fmt/include/fmt/std.h +699 -0
- package/external/fmt/include/fmt/xchar.h +322 -0
- package/external/fmt/src/fmt.cc +135 -0
- package/external/fmt/src/format.cc +43 -0
- package/external/fmt/src/os.cc +403 -0
- package/external/fmt/sync-config.json +8 -0
- package/external/folly/.syncignore +60 -0
- package/external/folly/Folly.natvis +25 -0
- package/external/folly/LICENSE +200 -0
- package/external/folly/README.md +263 -0
- package/external/folly/cgmanifest.json +25 -0
- package/external/folly/folly/.clang-format +1 -0
- package/external/folly/folly/AtomicHashArray-inl.h +546 -0
- package/external/folly/folly/AtomicHashArray.h +431 -0
- package/external/folly/folly/AtomicHashMap-inl.h +653 -0
- package/external/folly/folly/AtomicHashMap.h +484 -0
- package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
- package/external/folly/folly/AtomicLinkedList.h +110 -0
- package/external/folly/folly/AtomicUnorderedMap.h +522 -0
- package/external/folly/folly/BUCK +1631 -0
- package/external/folly/folly/BUILD_MODE.bzl +72 -0
- package/external/folly/folly/Benchmark.cpp +986 -0
- package/external/folly/folly/Benchmark.h +680 -0
- package/external/folly/folly/BenchmarkUtil.h +47 -0
- package/external/folly/folly/Bits.h +17 -0
- package/external/folly/folly/CMakeLists.txt +110 -0
- package/external/folly/folly/CPortability.h +338 -0
- package/external/folly/folly/CancellationToken-inl.h +449 -0
- package/external/folly/folly/CancellationToken.cpp +250 -0
- package/external/folly/folly/CancellationToken.h +365 -0
- package/external/folly/folly/Chrono.h +132 -0
- package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
- package/external/folly/folly/ClockGettimeWrappers.h +29 -0
- package/external/folly/folly/ConcurrentBitSet.h +157 -0
- package/external/folly/folly/ConcurrentLazy.h +74 -0
- package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
- package/external/folly/folly/ConcurrentSkipList.h +824 -0
- package/external/folly/folly/ConstexprMath.h +978 -0
- package/external/folly/folly/ConstructorCallbackList.h +158 -0
- package/external/folly/folly/Conv.cpp +1205 -0
- package/external/folly/folly/Conv.h +2026 -0
- package/external/folly/folly/CppAttributes.h +170 -0
- package/external/folly/folly/CpuId.h +297 -0
- package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
- package/external/folly/folly/Demangle.cpp +255 -0
- package/external/folly/folly/Demangle.h +73 -0
- package/external/folly/folly/DiscriminatedPtr.h +236 -0
- package/external/folly/folly/DynamicConverter.h +17 -0
- package/external/folly/folly/Exception.h +150 -0
- package/external/folly/folly/ExceptionString.cpp +51 -0
- package/external/folly/folly/ExceptionString.h +33 -0
- package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
- package/external/folly/folly/ExceptionWrapper.cpp +37 -0
- package/external/folly/folly/ExceptionWrapper.h +377 -0
- package/external/folly/folly/Executor.cpp +111 -0
- package/external/folly/folly/Executor.h +351 -0
- package/external/folly/folly/Expected.h +1725 -0
- package/external/folly/folly/FBString.h +2888 -0
- package/external/folly/folly/FBVector.h +17 -0
- package/external/folly/folly/File.cpp +180 -0
- package/external/folly/folly/File.h +177 -0
- package/external/folly/folly/FileUtil.cpp +378 -0
- package/external/folly/folly/FileUtil.h +332 -0
- package/external/folly/folly/Fingerprint.cpp +135 -0
- package/external/folly/folly/Fingerprint.h +289 -0
- package/external/folly/folly/FixedString.h +2965 -0
- package/external/folly/folly/FollyMemcpy.cpp +30 -0
- package/external/folly/folly/FollyMemcpy.h +23 -0
- package/external/folly/folly/FollyMemset.cpp +29 -0
- package/external/folly/folly/FollyMemset.h +25 -0
- package/external/folly/folly/Format-inl.h +1152 -0
- package/external/folly/folly/Format.cpp +429 -0
- package/external/folly/folly/Format.h +463 -0
- package/external/folly/folly/FormatArg.h +285 -0
- package/external/folly/folly/FormatTraits.h +65 -0
- package/external/folly/folly/Function.h +1159 -0
- package/external/folly/folly/GLog.h +85 -0
- package/external/folly/folly/GroupVarint.cpp +153 -0
- package/external/folly/folly/GroupVarint.h +630 -0
- package/external/folly/folly/Hash.h +20 -0
- package/external/folly/folly/IPAddress.cpp +490 -0
- package/external/folly/folly/IPAddress.h +667 -0
- package/external/folly/folly/IPAddressException.h +82 -0
- package/external/folly/folly/IPAddressV4.cpp +305 -0
- package/external/folly/folly/IPAddressV4.h +495 -0
- package/external/folly/folly/IPAddressV6.cpp +541 -0
- package/external/folly/folly/IPAddressV6.h +627 -0
- package/external/folly/folly/Indestructible.h +164 -0
- package/external/folly/folly/IndexedMemPool.h +550 -0
- package/external/folly/folly/IntrusiveList.h +17 -0
- package/external/folly/folly/Lazy.h +142 -0
- package/external/folly/folly/Likely.h +76 -0
- package/external/folly/folly/MPMCPipeline.h +280 -0
- package/external/folly/folly/MPMCQueue.h +1556 -0
- package/external/folly/folly/MacAddress.cpp +188 -0
- package/external/folly/folly/MacAddress.h +260 -0
- package/external/folly/folly/MapUtil.h +17 -0
- package/external/folly/folly/Math.h +258 -0
- package/external/folly/folly/MaybeManagedPtr.h +120 -0
- package/external/folly/folly/Memory.h +900 -0
- package/external/folly/folly/MicroLock.cpp +76 -0
- package/external/folly/folly/MicroLock.h +354 -0
- package/external/folly/folly/MicroSpinLock.h +17 -0
- package/external/folly/folly/MoveWrapper.h +76 -0
- package/external/folly/folly/ObserverContainer.h +1026 -0
- package/external/folly/folly/Optional.h +743 -0
- package/external/folly/folly/Overload.h +325 -0
- package/external/folly/folly/PackedSyncPtr.h +147 -0
- package/external/folly/folly/Padded.h +464 -0
- package/external/folly/folly/Poly-inl.h +230 -0
- package/external/folly/folly/Poly.h +1095 -0
- package/external/folly/folly/PolyException.h +43 -0
- package/external/folly/folly/Portability.h +644 -0
- package/external/folly/folly/Preprocessor.h +236 -0
- package/external/folly/folly/ProducerConsumerQueue.h +182 -0
- package/external/folly/folly/RWSpinLock.h +17 -0
- package/external/folly/folly/Random-inl.h +86 -0
- package/external/folly/folly/Random.cpp +184 -0
- package/external/folly/folly/Random.h +434 -0
- package/external/folly/folly/Range.h +1772 -0
- package/external/folly/folly/Replaceable.h +636 -0
- package/external/folly/folly/ScopeGuard.cpp +29 -0
- package/external/folly/folly/ScopeGuard.h +420 -0
- package/external/folly/folly/SharedMutex.cpp +81 -0
- package/external/folly/folly/SharedMutex.h +1751 -0
- package/external/folly/folly/Singleton-inl.h +332 -0
- package/external/folly/folly/Singleton.cpp +512 -0
- package/external/folly/folly/Singleton.h +891 -0
- package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
- package/external/folly/folly/SingletonThreadLocal.h +263 -0
- package/external/folly/folly/SocketAddress.cpp +786 -0
- package/external/folly/folly/SocketAddress.h +768 -0
- package/external/folly/folly/SpinLock.h +55 -0
- package/external/folly/folly/String-inl.h +668 -0
- package/external/folly/folly/String.cpp +777 -0
- package/external/folly/folly/String.h +767 -0
- package/external/folly/folly/Subprocess.cpp +1142 -0
- package/external/folly/folly/Subprocess.h +1055 -0
- package/external/folly/folly/Synchronized.h +1833 -0
- package/external/folly/folly/SynchronizedPtr.h +106 -0
- package/external/folly/folly/ThreadCachedInt.h +175 -0
- package/external/folly/folly/ThreadLocal.h +478 -0
- package/external/folly/folly/TimeoutQueue.cpp +78 -0
- package/external/folly/folly/TimeoutQueue.h +123 -0
- package/external/folly/folly/TokenBucket.h +673 -0
- package/external/folly/folly/Traits.h +1442 -0
- package/external/folly/folly/Try-inl.h +372 -0
- package/external/folly/folly/Try.cpp +23 -0
- package/external/folly/folly/Try.h +728 -0
- package/external/folly/folly/UTF8String.h +56 -0
- package/external/folly/folly/Unicode.cpp +201 -0
- package/external/folly/folly/Unicode.h +94 -0
- package/external/folly/folly/Unit.h +65 -0
- package/external/folly/folly/Uri-inl.h +101 -0
- package/external/folly/folly/Uri.cpp +190 -0
- package/external/folly/folly/Uri.h +142 -0
- package/external/folly/folly/Utility.h +932 -0
- package/external/folly/folly/VERSION +1 -0
- package/external/folly/folly/Varint.h +230 -0
- package/external/folly/folly/VirtualExecutor.h +17 -0
- package/external/folly/folly/algorithm/simd/BUCK +47 -0
- package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
- package/external/folly/folly/algorithm/simd/Contains.h +116 -0
- package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
- package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
- package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
- package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
- package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
- package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
- package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
- package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
- package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
- package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
- package/external/folly/folly/base64.h +264 -0
- package/external/folly/folly/chrono/BUCK +29 -0
- package/external/folly/folly/chrono/Clock.h +65 -0
- package/external/folly/folly/chrono/Conv.h +712 -0
- package/external/folly/folly/chrono/Hardware.h +155 -0
- package/external/folly/folly/chrono/test/BUCK +26 -0
- package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
- package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
- package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
- package/external/folly/folly/concurrency/BUCK +170 -0
- package/external/folly/folly/concurrency/CacheLocality.cpp +633 -0
- package/external/folly/folly/concurrency/CacheLocality.h +460 -0
- package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
- package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
- package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
- package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
- package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
- package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
- package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
- package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
- package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
- package/external/folly/folly/concurrency/container/BUCK +77 -0
- package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
- package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
- package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
- package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
- package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
- package/external/folly/folly/concurrency/container/test/BUCK +75 -0
- package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
- package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
- package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
- package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
- package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
- package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
- package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
- package/external/folly/folly/concurrency/memory/BUCK +53 -0
- package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
- package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
- package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
- package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
- package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
- package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
- package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
- package/external/folly/folly/concurrency/test/BUCK +229 -0
- package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
- package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
- package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
- package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
- package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
- package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
- package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
- package/external/folly/folly/container/Access.h +57 -0
- package/external/folly/folly/container/Array.h +87 -0
- package/external/folly/folly/container/BUCK +353 -0
- package/external/folly/folly/container/BitIterator.h +203 -0
- package/external/folly/folly/container/Enumerate.h +162 -0
- package/external/folly/folly/container/EvictingCacheMap.h +730 -0
- package/external/folly/folly/container/F14.md +300 -0
- package/external/folly/folly/container/F14Map-fwd.h +113 -0
- package/external/folly/folly/container/F14Map.h +2108 -0
- package/external/folly/folly/container/F14Set-fwd.h +95 -0
- package/external/folly/folly/container/F14Set.h +1603 -0
- package/external/folly/folly/container/FBVector.h +1711 -0
- package/external/folly/folly/container/Foreach-inl.h +316 -0
- package/external/folly/folly/container/Foreach.h +209 -0
- package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
- package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
- package/external/folly/folly/container/IntrusiveHeap.h +268 -0
- package/external/folly/folly/container/IntrusiveList.h +131 -0
- package/external/folly/folly/container/Iterator.h +843 -0
- package/external/folly/folly/container/MapUtil.h +376 -0
- package/external/folly/folly/container/Merge.h +90 -0
- package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
- package/external/folly/folly/container/RegexMatchCache.h +699 -0
- package/external/folly/folly/container/Reserve.h +109 -0
- package/external/folly/folly/container/SparseByteSet.h +123 -0
- package/external/folly/folly/container/View.h +81 -0
- package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
- package/external/folly/folly/container/detail/BUCK +115 -0
- package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
- package/external/folly/folly/container/detail/F14Defaults.h +34 -0
- package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
- package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
- package/external/folly/folly/container/detail/F14Mask.h +235 -0
- package/external/folly/folly/container/detail/F14Policy.h +1523 -0
- package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
- package/external/folly/folly/container/detail/F14Table.cpp +71 -0
- package/external/folly/folly/container/detail/F14Table.h +2680 -0
- package/external/folly/folly/container/detail/Util.h +303 -0
- package/external/folly/folly/container/detail/tape_detail.h +135 -0
- package/external/folly/folly/container/detail/test/BUCK +14 -0
- package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
- package/external/folly/folly/container/heap_vector_types.h +1683 -0
- package/external/folly/folly/container/range_traits.h +81 -0
- package/external/folly/folly/container/small_vector.h +1476 -0
- package/external/folly/folly/container/sorted_vector_types.h +1652 -0
- package/external/folly/folly/container/span.h +408 -0
- package/external/folly/folly/container/tape.h +608 -0
- package/external/folly/folly/container/test/.clang-tidy +12 -0
- package/external/folly/folly/container/test/AccessTest.cpp +138 -0
- package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
- package/external/folly/folly/container/test/BUCK +568 -0
- package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
- package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
- package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
- package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
- package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
- package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
- package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
- package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
- package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
- package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
- package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
- package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
- package/external/folly/folly/container/test/F14TestUtil.h +117 -0
- package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
- package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
- package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
- package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
- package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
- package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
- package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
- package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
- package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
- package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
- package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
- package/external/folly/folly/container/test/MergeTest.cpp +66 -0
- package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
- package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
- package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
- package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
- package/external/folly/folly/container/test/TrackingTypes.h +584 -0
- package/external/folly/folly/container/test/UtilTest.cpp +609 -0
- package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
- package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
- package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
- package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
- package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
- package/external/folly/folly/container/test/span_test.cpp +520 -0
- package/external/folly/folly/container/test/tape_bench.cpp +200 -0
- package/external/folly/folly/container/test/tape_test.cpp +590 -0
- package/external/folly/folly/defs.bzl +238 -0
- package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
- package/external/folly/folly/detail/AsyncTrace.h +44 -0
- package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
- package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
- package/external/folly/folly/detail/BUCK +406 -0
- package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
- package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
- package/external/folly/folly/detail/FileUtilDetail.h +85 -0
- package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
- package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
- package/external/folly/folly/detail/Futex-inl.h +123 -0
- package/external/folly/folly/detail/Futex.cpp +273 -0
- package/external/folly/folly/detail/Futex.h +109 -0
- package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
- package/external/folly/folly/detail/IPAddress.cpp +37 -0
- package/external/folly/folly/detail/IPAddress.h +57 -0
- package/external/folly/folly/detail/IPAddressSource.h +278 -0
- package/external/folly/folly/detail/Iterators.h +156 -0
- package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
- package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
- package/external/folly/folly/detail/MemoryIdler.h +216 -0
- package/external/folly/folly/detail/PerfScoped.cpp +112 -0
- package/external/folly/folly/detail/PerfScoped.h +70 -0
- package/external/folly/folly/detail/PolyDetail.h +921 -0
- package/external/folly/folly/detail/RangeCommon.cpp +55 -0
- package/external/folly/folly/detail/RangeCommon.h +93 -0
- package/external/folly/folly/detail/RangeSse42.cpp +198 -0
- package/external/folly/folly/detail/RangeSse42.h +30 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
- package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
- package/external/folly/folly/detail/Singleton.h +34 -0
- package/external/folly/folly/detail/SlowFingerprint.h +90 -0
- package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
- package/external/folly/folly/detail/SocketFastOpen.h +89 -0
- package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
- package/external/folly/folly/detail/SplitStringSimd.h +151 -0
- package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
- package/external/folly/folly/detail/Sse.cpp +35 -0
- package/external/folly/folly/detail/Sse.h +45 -0
- package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
- package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
- package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
- package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
- package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
- package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
- package/external/folly/folly/detail/TurnSequencer.h +295 -0
- package/external/folly/folly/detail/TypeList.h +551 -0
- package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
- package/external/folly/folly/detail/UniqueInstance.h +68 -0
- package/external/folly/folly/detail/base64_detail/BUCK +102 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
- package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
- package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
- package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
- package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
- package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
- package/external/folly/folly/detail/base64_detail/README.md +392 -0
- package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
- package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
- package/external/folly/folly/detail/test/BUCK +118 -0
- package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
- package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
- package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
- package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
- package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
- package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
- package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
- package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
- package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
- package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
- package/external/folly/folly/detail/thread_local_globals.h +36 -0
- package/external/folly/folly/docs/AtomicHashMap.md +134 -0
- package/external/folly/folly/docs/Benchmark.md +310 -0
- package/external/folly/folly/docs/Conv.md +291 -0
- package/external/folly/folly/docs/Dynamic.md +220 -0
- package/external/folly/folly/docs/DynamicConverter.md +71 -0
- package/external/folly/folly/docs/Executors.md +63 -0
- package/external/folly/folly/docs/FBString.md +46 -0
- package/external/folly/folly/docs/FBVector.md +200 -0
- package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
- package/external/folly/folly/docs/Format.md +177 -0
- package/external/folly/folly/docs/Function.md +92 -0
- package/external/folly/folly/docs/Futures.md +263 -0
- package/external/folly/folly/docs/GroupVarint.md +46 -0
- package/external/folly/folly/docs/Histogram.md +104 -0
- package/external/folly/folly/docs/MapUtils.md +80 -0
- package/external/folly/folly/docs/Overview.md +263 -0
- package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
- package/external/folly/folly/docs/Poly.md +500 -0
- package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
- package/external/folly/folly/docs/Rcu.md +218 -0
- package/external/folly/folly/docs/SmallLocks.md +24 -0
- package/external/folly/folly/docs/Synchronized.md +793 -0
- package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
- package/external/folly/folly/docs/ThreadLocal.md +105 -0
- package/external/folly/folly/docs/Traits.md +161 -0
- package/external/folly/folly/docs/small_vector.md +64 -0
- package/external/folly/folly/docs/style.css +23 -0
- package/external/folly/folly/dynamic-inl.h +17 -0
- package/external/folly/folly/dynamic.h +17 -0
- package/external/folly/folly/folly_extended_library.bzl +28 -0
- package/external/folly/folly/functional/ApplyTuple.h +204 -0
- package/external/folly/folly/functional/BUCK +57 -0
- package/external/folly/folly/functional/Invoke.h +880 -0
- package/external/folly/folly/functional/Partial.h +130 -0
- package/external/folly/folly/functional/protocol.h +203 -0
- package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
- package/external/folly/folly/functional/test/BUCK +57 -0
- package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
- package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
- package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
- package/external/folly/folly/functional/test/traits_test.cpp +551 -0
- package/external/folly/folly/functional/traits.h +675 -0
- package/external/folly/folly/hash/BUCK +86 -0
- package/external/folly/folly/hash/Checksum.cpp +275 -0
- package/external/folly/folly/hash/Checksum.h +94 -0
- package/external/folly/folly/hash/FarmHash.h +46 -0
- package/external/folly/folly/hash/Hash.h +1045 -0
- package/external/folly/folly/hash/MurmurHash.h +86 -0
- package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
- package/external/folly/folly/hash/SpookyHashV1.h +307 -0
- package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
- package/external/folly/folly/hash/SpookyHashV2.h +339 -0
- package/external/folly/folly/hash/detail/BUCK +26 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
- package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
- package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
- package/external/folly/folly/hash/test/BUCK +132 -0
- package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
- package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
- package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
- package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
- package/external/folly/folly/hash/test/HashTest.cpp +997 -0
- package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
- package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
- package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
- package/external/folly/folly/hash/test/traits_test.cpp +69 -0
- package/external/folly/folly/hash/traits.h +115 -0
- package/external/folly/folly/json/BUCK +155 -0
- package/external/folly/folly/json/DynamicConverter.h +464 -0
- package/external/folly/folly/json/DynamicParser-inl.h +316 -0
- package/external/folly/folly/json/DynamicParser.cpp +198 -0
- package/external/folly/folly/json/DynamicParser.h +394 -0
- package/external/folly/folly/json/JSONSchema.cpp +1030 -0
- package/external/folly/folly/json/JSONSchema.h +73 -0
- package/external/folly/folly/json/JsonMockUtil.h +73 -0
- package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
- package/external/folly/folly/json/JsonTestUtil.h +88 -0
- package/external/folly/folly/json/bser/BUCK +24 -0
- package/external/folly/folly/json/bser/Bser.h +107 -0
- package/external/folly/folly/json/bser/Dump.cpp +253 -0
- package/external/folly/folly/json/bser/Load.cpp +246 -0
- package/external/folly/folly/json/bser/test/BUCK +14 -0
- package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
- package/external/folly/folly/json/dynamic-inl.h +1438 -0
- package/external/folly/folly/json/dynamic.cpp +552 -0
- package/external/folly/folly/json/dynamic.h +1346 -0
- package/external/folly/folly/json/json.cpp +1118 -0
- package/external/folly/folly/json/json.h +238 -0
- package/external/folly/folly/json/json_patch.cpp +325 -0
- package/external/folly/folly/json/json_patch.h +126 -0
- package/external/folly/folly/json/json_pointer.cpp +114 -0
- package/external/folly/folly/json/json_pointer.h +87 -0
- package/external/folly/folly/json/test/BUCK +147 -0
- package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
- package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
- package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
- package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
- package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
- package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
- package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
- package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
- package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
- package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
- package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
- package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
- package/external/folly/folly/json/tool/BUCK +13 -0
- package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
- package/external/folly/folly/json.h +17 -0
- package/external/folly/folly/json_patch.h +17 -0
- package/external/folly/folly/json_pointer.h +17 -0
- package/external/folly/folly/lang/Access.h +29 -0
- package/external/folly/folly/lang/Align.h +240 -0
- package/external/folly/folly/lang/Aligned.h +92 -0
- package/external/folly/folly/lang/Assume.h +82 -0
- package/external/folly/folly/lang/BUCK +287 -0
- package/external/folly/folly/lang/Badge.h +108 -0
- package/external/folly/folly/lang/Bits.h +570 -0
- package/external/folly/folly/lang/BitsClass.h +312 -0
- package/external/folly/folly/lang/Builtin.h +74 -0
- package/external/folly/folly/lang/CArray.h +34 -0
- package/external/folly/folly/lang/CString.cpp +86 -0
- package/external/folly/folly/lang/CString.h +55 -0
- package/external/folly/folly/lang/Cast.h +51 -0
- package/external/folly/folly/lang/CheckedMath.h +253 -0
- package/external/folly/folly/lang/CustomizationPoint.h +58 -0
- package/external/folly/folly/lang/Exception.cpp +822 -0
- package/external/folly/folly/lang/Exception.h +716 -0
- package/external/folly/folly/lang/Extern.h +55 -0
- package/external/folly/folly/lang/Hint-inl.h +144 -0
- package/external/folly/folly/lang/Hint.h +238 -0
- package/external/folly/folly/lang/Keep.h +98 -0
- package/external/folly/folly/lang/New.h +124 -0
- package/external/folly/folly/lang/Ordering.h +140 -0
- package/external/folly/folly/lang/Pretty.h +159 -0
- package/external/folly/folly/lang/PropagateConst.h +413 -0
- package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
- package/external/folly/folly/lang/SafeAssert.cpp +589 -0
- package/external/folly/folly/lang/SafeAssert.h +188 -0
- package/external/folly/folly/lang/StaticConst.h +33 -0
- package/external/folly/folly/lang/Thunk.h +100 -0
- package/external/folly/folly/lang/ToAscii.cpp +348 -0
- package/external/folly/folly/lang/ToAscii.h +182 -0
- package/external/folly/folly/lang/TypeInfo.h +58 -0
- package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
- package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
- package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
- package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
- package/external/folly/folly/lang/test/BUCK +258 -0
- package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
- package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
- package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
- package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
- package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
- package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
- package/external/folly/folly/lang/test/CastTest.cpp +47 -0
- package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
- package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
- package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
- package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
- package/external/folly/folly/lang/test/HintTest.cpp +100 -0
- package/external/folly/folly/lang/test/NewTest.cpp +38 -0
- package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
- package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
- package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
- package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
- package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
- package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
- package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
- package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
- package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
- package/external/folly/folly/memcpy.S +292 -0
- package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
- package/external/folly/folly/memory/Arena-inl.h +83 -0
- package/external/folly/folly/memory/Arena.h +325 -0
- package/external/folly/folly/memory/BUCK +191 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
- package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
- package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
- package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
- package/external/folly/folly/memory/MallctlHelper.h +167 -0
- package/external/folly/folly/memory/Malloc.h +551 -0
- package/external/folly/folly/memory/MemoryResource.h +57 -0
- package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
- package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
- package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
- package/external/folly/folly/memory/SanitizeAddress.h +117 -0
- package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
- package/external/folly/folly/memory/SanitizeLeak.h +108 -0
- package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
- package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
- package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
- package/external/folly/folly/memory/detail/BUCK +10 -0
- package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
- package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
- package/external/folly/folly/memory/not_null-inl.h +522 -0
- package/external/folly/folly/memory/not_null.h +449 -0
- package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
- package/external/folly/folly/memory/test/BUCK +146 -0
- package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
- package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
- package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
- package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
- package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
- package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
- package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
- package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
- package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
- package/external/folly/folly/memset.S +245 -0
- package/external/folly/folly/memset_select_aarch64.cpp +72 -0
- package/external/folly/folly/portability/Asm.h +50 -0
- package/external/folly/folly/portability/Atomic.h +31 -0
- package/external/folly/folly/portability/BUCK +456 -0
- package/external/folly/folly/portability/Builtins.cpp +31 -0
- package/external/folly/folly/portability/Builtins.h +161 -0
- package/external/folly/folly/portability/Config.h +43 -0
- package/external/folly/folly/portability/Constexpr.h +145 -0
- package/external/folly/folly/portability/Dirent.cpp +140 -0
- package/external/folly/folly/portability/Dirent.h +41 -0
- package/external/folly/folly/portability/Event.h +44 -0
- package/external/folly/folly/portability/Fcntl.cpp +120 -0
- package/external/folly/folly/portability/Fcntl.h +67 -0
- package/external/folly/folly/portability/Filesystem.cpp +67 -0
- package/external/folly/folly/portability/Filesystem.h +114 -0
- package/external/folly/folly/portability/FmtCompile.h +40 -0
- package/external/folly/folly/portability/GFlags.h +139 -0
- package/external/folly/folly/portability/GMock.h +35 -0
- package/external/folly/folly/portability/GTest.h +35 -0
- package/external/folly/folly/portability/IOVec.h +34 -0
- package/external/folly/folly/portability/Libgen.cpp +59 -0
- package/external/folly/folly/portability/Libgen.h +29 -0
- package/external/folly/folly/portability/Libunwind.h +21 -0
- package/external/folly/folly/portability/Malloc.cpp +31 -0
- package/external/folly/folly/portability/Malloc.h +53 -0
- package/external/folly/folly/portability/Math.h +90 -0
- package/external/folly/folly/portability/Memory.h +26 -0
- package/external/folly/folly/portability/OpenSSL.cpp +17 -0
- package/external/folly/folly/portability/OpenSSL.h +102 -0
- package/external/folly/folly/portability/PThread.cpp +697 -0
- package/external/folly/folly/portability/PThread.h +148 -0
- package/external/folly/folly/portability/README.md +21 -0
- package/external/folly/folly/portability/Sched.cpp +41 -0
- package/external/folly/folly/portability/Sched.h +45 -0
- package/external/folly/folly/portability/Sockets.cpp +245 -0
- package/external/folly/folly/portability/Sockets.h +155 -0
- package/external/folly/folly/portability/SourceLocation.h +49 -0
- package/external/folly/folly/portability/Stdio.cpp +77 -0
- package/external/folly/folly/portability/Stdio.h +32 -0
- package/external/folly/folly/portability/Stdlib.cpp +172 -0
- package/external/folly/folly/portability/Stdlib.h +64 -0
- package/external/folly/folly/portability/String.cpp +53 -0
- package/external/folly/folly/portability/String.h +39 -0
- package/external/folly/folly/portability/SysFile.cpp +46 -0
- package/external/folly/folly/portability/SysFile.h +27 -0
- package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
- package/external/folly/folly/portability/SysMembarrier.h +26 -0
- package/external/folly/folly/portability/SysMman.cpp +242 -0
- package/external/folly/folly/portability/SysMman.h +68 -0
- package/external/folly/folly/portability/SysResource.cpp +108 -0
- package/external/folly/folly/portability/SysResource.h +71 -0
- package/external/folly/folly/portability/SysStat.cpp +66 -0
- package/external/folly/folly/portability/SysStat.h +52 -0
- package/external/folly/folly/portability/SysSyscall.h +73 -0
- package/external/folly/folly/portability/SysTime.cpp +62 -0
- package/external/folly/folly/portability/SysTime.h +50 -0
- package/external/folly/folly/portability/SysTypes.h +44 -0
- package/external/folly/folly/portability/SysUio.cpp +179 -0
- package/external/folly/folly/portability/SysUio.h +51 -0
- package/external/folly/folly/portability/Syslog.h +39 -0
- package/external/folly/folly/portability/Time.cpp +357 -0
- package/external/folly/folly/portability/Time.h +74 -0
- package/external/folly/folly/portability/Unistd.cpp +33 -0
- package/external/folly/folly/portability/Unistd.h +111 -0
- package/external/folly/folly/portability/Windows.h +108 -0
- package/external/folly/folly/portability/openat2.c +30 -0
- package/external/folly/folly/portability/openat2.h +39 -0
- package/external/folly/folly/portability/test/BUCK +59 -0
- package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
- package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
- package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
- package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
- package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
- package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
- package/external/folly/folly/small_vector.h +17 -0
- package/external/folly/folly/somerge_defs.bzl +399 -0
- package/external/folly/folly/sorted_vector_types.h +17 -0
- package/external/folly/folly/stop_watch.h +317 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
- package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
- package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
- package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
- package/external/folly/folly/synchronization/AtomicRef.h +181 -0
- package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
- package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
- package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
- package/external/folly/folly/synchronization/BUCK +418 -0
- package/external/folly/folly/synchronization/Baton.h +419 -0
- package/external/folly/folly/synchronization/CallOnce.h +263 -0
- package/external/folly/folly/synchronization/DelayedInit.h +179 -0
- package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
- package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
- package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
- package/external/folly/folly/synchronization/EventCount.h +200 -0
- package/external/folly/folly/synchronization/FlatCombining.h +629 -0
- package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
- package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
- package/external/folly/folly/synchronization/Hazptr.h +209 -0
- package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
- package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
- package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
- package/external/folly/folly/synchronization/HazptrObj.h +533 -0
- package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
- package/external/folly/folly/synchronization/HazptrRec.h +68 -0
- package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
- package/external/folly/folly/synchronization/Latch.h +160 -0
- package/external/folly/folly/synchronization/LifoSem.h +767 -0
- package/external/folly/folly/synchronization/Lock.h +887 -0
- package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
- package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
- package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
- package/external/folly/folly/synchronization/ParkingLot.h +330 -0
- package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
- package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
- package/external/folly/folly/synchronization/Rcu.cpp +26 -0
- package/external/folly/folly/synchronization/Rcu.h +553 -0
- package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
- package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
- package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
- package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
- package/external/folly/folly/synchronization/SmallLocks.h +36 -0
- package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
- package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
- package/external/folly/folly/synchronization/WaitOptions.h +75 -0
- package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
- package/external/folly/folly/synchronization/detail/BUCK +104 -0
- package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
- package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
- package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
- package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
- package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
- package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
- package/external/folly/folly/synchronization/detail/Spin.h +96 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
- package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
- package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
- package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
- package/external/folly/folly/synchronization/example/BUCK +27 -0
- package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
- package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
- package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
- package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
- package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
- package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
- package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
- package/external/folly/folly/synchronization/test/BUCK +495 -0
- package/external/folly/folly/synchronization/test/Barrier.h +52 -0
- package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
- package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
- package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
- package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
- package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
- package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
- package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
- package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
- package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
- package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
- package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
- package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
- package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
- package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
- package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
- package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
- package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
- package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
- package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
- package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
- package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
- package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
- package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
- package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
- package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
- package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
- package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
- package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
- package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
- package/external/folly/folly/system/AtFork.cpp +205 -0
- package/external/folly/folly/system/AtFork.h +116 -0
- package/external/folly/folly/system/AuxVector.h +198 -0
- package/external/folly/folly/system/BUCK +144 -0
- package/external/folly/folly/system/EnvUtil.cpp +93 -0
- package/external/folly/folly/system/EnvUtil.h +113 -0
- package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
- package/external/folly/folly/system/HardwareConcurrency.h +23 -0
- package/external/folly/folly/system/MemoryMapping.cpp +477 -0
- package/external/folly/folly/system/MemoryMapping.h +287 -0
- package/external/folly/folly/system/Pid.cpp +87 -0
- package/external/folly/folly/system/Pid.h +34 -0
- package/external/folly/folly/system/Shell.cpp +33 -0
- package/external/folly/folly/system/Shell.h +93 -0
- package/external/folly/folly/system/ThreadId.cpp +89 -0
- package/external/folly/folly/system/ThreadId.h +62 -0
- package/external/folly/folly/system/ThreadName.cpp +330 -0
- package/external/folly/folly/system/ThreadName.h +72 -0
- package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
- package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
- package/external/folly/folly/system/test/BUCK +120 -0
- package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
- package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
- package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
- package/external/folly/folly/system/test/PidTest.cpp +46 -0
- package/external/folly/folly/system/test/ShellTest.cpp +66 -0
- package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
- package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
- package/external/folly/folly.vcxitems +164 -0
- package/external/folly/static/logo.svg +1 -0
- package/external/folly/sync-config.json +8 -0
- package/package.json +8 -8
- package/templates/cpp-lib/example/metro.config.js +18 -2
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#include <folly/FileUtil.h>
|
|
18
|
+
|
|
19
|
+
#include <cerrno>
|
|
20
|
+
#include <string>
|
|
21
|
+
#include <system_error>
|
|
22
|
+
#include <vector>
|
|
23
|
+
|
|
24
|
+
#include <folly/detail/FileUtilDetail.h>
|
|
25
|
+
#include <folly/detail/FileUtilVectorDetail.h>
|
|
26
|
+
#include <folly/net/NetOps.h>
|
|
27
|
+
#include <folly/portability/Fcntl.h>
|
|
28
|
+
#include <folly/portability/Sockets.h>
|
|
29
|
+
#include <folly/portability/Stdlib.h>
|
|
30
|
+
#include <folly/portability/SysFile.h>
|
|
31
|
+
#include <folly/portability/SysStat.h>
|
|
32
|
+
|
|
33
|
+
namespace folly {
|
|
34
|
+
namespace {
|
|
35
|
+
iovec getIOVecFor(ByteRange);
|
|
36
|
+
} // namespace
|
|
37
|
+
|
|
38
|
+
using namespace fileutil_detail;
|
|
39
|
+
|
|
40
|
+
int openNoInt(const char* name, int flags, mode_t mode) {
|
|
41
|
+
// Android NDK bionic with FORTIFY has this definition:
|
|
42
|
+
// https://android.googlesource.com/platform/bionic/+/9349b9e51b/libc/include/bits/fortify/fcntl.h
|
|
43
|
+
// ```
|
|
44
|
+
// __BIONIC_ERROR_FUNCTION_VISIBILITY
|
|
45
|
+
// int open(const char* pathname, int flags, mode_t modes, ...) __overloadable
|
|
46
|
+
// __errorattr(__open_too_many_args_error);
|
|
47
|
+
// ```
|
|
48
|
+
// This is originally to prevent open() with incorrect parameters.
|
|
49
|
+
//
|
|
50
|
+
// However, combined with folly wrapNotInt, template deduction will fail.
|
|
51
|
+
// In this case, we create a custom lambda to bypass the error.
|
|
52
|
+
// The solution is referenced from
|
|
53
|
+
// https://github.com/llvm/llvm-project/commit/0a0e411204a2baa520fd73a8d69b664f98b428ba
|
|
54
|
+
//
|
|
55
|
+
auto openWrapper = [&] { return open(name, flags, mode); };
|
|
56
|
+
return int(wrapNoInt(openWrapper));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static int filterCloseReturn(int r) {
|
|
60
|
+
// Ignore EINTR. On Linux, close() may only return EINTR after the file
|
|
61
|
+
// descriptor has been closed, so you must not retry close() on EINTR --
|
|
62
|
+
// in the best case, you'll get EBADF, and in the worst case, you'll end up
|
|
63
|
+
// closing a different file (one opened from another thread).
|
|
64
|
+
//
|
|
65
|
+
// Interestingly enough, the Single Unix Specification says that the state
|
|
66
|
+
// of the file descriptor is unspecified if close returns EINTR. In that
|
|
67
|
+
// case, the safe thing to do is also not to retry close() -- leaking a file
|
|
68
|
+
// descriptor is definitely better than closing the wrong file.
|
|
69
|
+
if (r == -1 && errno == EINTR) {
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
return r;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
int closeNoInt(int fd) {
|
|
76
|
+
return filterCloseReturn(close(fd));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
int closeNoInt(NetworkSocket fd) {
|
|
80
|
+
return filterCloseReturn(netops::close(fd));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
int fsyncNoInt(int fd) {
|
|
84
|
+
return int(wrapNoInt(fsync, fd));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
int dupNoInt(int fd) {
|
|
88
|
+
return int(wrapNoInt(dup, fd));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
int dup2NoInt(int oldFd, int newFd) {
|
|
92
|
+
return int(wrapNoInt(dup2, oldFd, newFd));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
int fdatasyncNoInt(int fd) {
|
|
96
|
+
#if defined(__APPLE__)
|
|
97
|
+
return int(wrapNoInt(fcntl, fd, F_FULLFSYNC));
|
|
98
|
+
#elif defined(__FreeBSD__) || defined(_MSC_VER)
|
|
99
|
+
return int(wrapNoInt(fsync, fd));
|
|
100
|
+
#else
|
|
101
|
+
return int(wrapNoInt(fdatasync, fd));
|
|
102
|
+
#endif
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
int ftruncateNoInt(int fd, off_t len) {
|
|
106
|
+
return int(wrapNoInt(ftruncate, fd, len));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
int truncateNoInt(const char* path, off_t len) {
|
|
110
|
+
return int(wrapNoInt(truncate, path, len));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
int flockNoInt(int fd, int operation) {
|
|
114
|
+
return int(wrapNoInt(flock, fd, operation));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
int shutdownNoInt(NetworkSocket fd, int how) {
|
|
118
|
+
return int(wrapNoInt(netops::shutdown, fd, how));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
ssize_t readNoInt(int fd, void* buf, size_t count) {
|
|
122
|
+
return wrapNoInt(read, fd, buf, count);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
ssize_t preadNoInt(int fd, void* buf, size_t count, off_t offset) {
|
|
126
|
+
return wrapNoInt(pread, fd, buf, count, offset);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
ssize_t readvNoInt(int fd, const iovec* iov, int count) {
|
|
130
|
+
return wrapNoInt(readv, fd, iov, count);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
ssize_t preadvNoInt(int fd, const iovec* iov, int count, off_t offset) {
|
|
134
|
+
return wrapNoInt(preadv, fd, iov, count, offset);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
ssize_t writeNoInt(int fd, const void* buf, size_t count) {
|
|
138
|
+
return wrapNoInt(write, fd, buf, count);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
ssize_t pwriteNoInt(int fd, const void* buf, size_t count, off_t offset) {
|
|
142
|
+
return wrapNoInt(pwrite, fd, buf, count, offset);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
ssize_t writevNoInt(int fd, const iovec* iov, int count) {
|
|
146
|
+
return wrapNoInt(writev, fd, iov, count);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
ssize_t pwritevNoInt(int fd, const iovec* iov, int count, off_t offset) {
|
|
150
|
+
return wrapNoInt(pwritev, fd, iov, count, offset);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
ssize_t readFull(int fd, void* buf, size_t count) {
|
|
154
|
+
return wrapFull(read, fd, buf, count);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
ssize_t preadFull(int fd, void* buf, size_t count, off_t offset) {
|
|
158
|
+
return wrapFull(pread, fd, buf, count, offset);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
ssize_t writeFull(int fd, const void* buf, size_t count) {
|
|
162
|
+
return wrapFull(write, fd, const_cast<void*>(buf), count);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
ssize_t pwriteFull(int fd, const void* buf, size_t count, off_t offset) {
|
|
166
|
+
return wrapFull(pwrite, fd, const_cast<void*>(buf), count, offset);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
#ifndef _WIN32
|
|
170
|
+
ssize_t readvFull(int fd, iovec* iov, int count) {
|
|
171
|
+
return wrapvFull(readv, fd, iov, count);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
ssize_t preadvFull(int fd, iovec* iov, int count, off_t offset) {
|
|
175
|
+
return wrapvFull(preadv, fd, iov, count, offset);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
ssize_t writevFull(int fd, iovec* iov, int count) {
|
|
179
|
+
return wrapvFull(writev, fd, iov, count);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
ssize_t pwritevFull(int fd, iovec* iov, int count, off_t offset) {
|
|
183
|
+
return wrapvFull(pwritev, fd, iov, count, offset);
|
|
184
|
+
}
|
|
185
|
+
#else // _WIN32
|
|
186
|
+
|
|
187
|
+
// On Windows, the *vFull() functions wrap the simple read/pread/write/pwrite
|
|
188
|
+
// functions. While folly/portability/SysUio.cpp does define readv() and
|
|
189
|
+
// writev() implementations for Windows, these attempt to lock the file to
|
|
190
|
+
// provide atomicity. The *vFull() functions do not provide any atomicity
|
|
191
|
+
// guarantees, so we can avoid the locking logic.
|
|
192
|
+
|
|
193
|
+
ssize_t readvFull(int fd, iovec* iov, int count) {
|
|
194
|
+
return wrapvFull(read, fd, iov, count);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
ssize_t preadvFull(int fd, iovec* iov, int count, off_t offset) {
|
|
198
|
+
return wrapvFull(pread, fd, iov, count, offset);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
ssize_t writevFull(int fd, iovec* iov, int count) {
|
|
202
|
+
return wrapvFull(write, fd, iov, count);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
ssize_t pwritevFull(int fd, iovec* iov, int count, off_t offset) {
|
|
206
|
+
return wrapvFull(pwrite, fd, iov, count, offset);
|
|
207
|
+
}
|
|
208
|
+
#endif // _WIN32
|
|
209
|
+
|
|
210
|
+
WriteFileAtomicOptions& WriteFileAtomicOptions::setPermissions(
|
|
211
|
+
mode_t _permissions) {
|
|
212
|
+
permissions = _permissions;
|
|
213
|
+
return *this;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
WriteFileAtomicOptions& WriteFileAtomicOptions::setSyncType(
|
|
217
|
+
SyncType _syncType) {
|
|
218
|
+
syncType = _syncType;
|
|
219
|
+
return *this;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
WriteFileAtomicOptions& WriteFileAtomicOptions::setTemporaryDirectory(
|
|
223
|
+
std::string _temporaryDirectory) {
|
|
224
|
+
temporaryDirectory = std::move(_temporaryDirectory);
|
|
225
|
+
return *this;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
namespace {
|
|
229
|
+
void throwIfWriteFileAtomicFailed(
|
|
230
|
+
StringPiece function, StringPiece filename, std::int64_t rc) {
|
|
231
|
+
if (rc != 0) {
|
|
232
|
+
auto msg =
|
|
233
|
+
std::string{function} + "() failed to update " + std::string{filename};
|
|
234
|
+
throw std::system_error(rc, std::generic_category(), msg);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// We write the data to a temporary file name first, then atomically rename
|
|
239
|
+
// it into place.
|
|
240
|
+
//
|
|
241
|
+
// If SyncType::WITH_SYNC is used, this ensures that the file contents will
|
|
242
|
+
// always be valid, even if we crash or are killed partway through writing out
|
|
243
|
+
// data.
|
|
244
|
+
int writeFileAtomicNoThrowImpl(
|
|
245
|
+
StringPiece filename,
|
|
246
|
+
iovec* iov,
|
|
247
|
+
int count,
|
|
248
|
+
const WriteFileAtomicOptions& options) {
|
|
249
|
+
// create a null-terminated version of the filename
|
|
250
|
+
auto filePathString = std::string{filename};
|
|
251
|
+
auto temporaryFilePathString = fileutil_detail::getTemporaryFilePathString(
|
|
252
|
+
filePathString, options.temporaryDirectory);
|
|
253
|
+
|
|
254
|
+
auto tmpFD = mkstemp(const_cast<char*>(temporaryFilePathString.data()));
|
|
255
|
+
if (tmpFD == -1) {
|
|
256
|
+
return errno;
|
|
257
|
+
}
|
|
258
|
+
bool success = false;
|
|
259
|
+
SCOPE_EXIT {
|
|
260
|
+
if (tmpFD != -1) {
|
|
261
|
+
close(tmpFD);
|
|
262
|
+
}
|
|
263
|
+
if (!success) {
|
|
264
|
+
unlink(temporaryFilePathString.c_str());
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
auto rc = writevFull(tmpFD, iov, count);
|
|
269
|
+
if (rc == -1) {
|
|
270
|
+
return errno;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
rc = fchmod(tmpFD, options.permissions);
|
|
274
|
+
if (rc == -1) {
|
|
275
|
+
return errno;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// To guarantee atomicity across power failues on POSIX file systems,
|
|
279
|
+
// the temporary file must be explicitly sync'ed before the rename.
|
|
280
|
+
if (options.syncType == SyncType::WITH_SYNC) {
|
|
281
|
+
rc = fsyncNoInt(tmpFD);
|
|
282
|
+
if (rc == -1) {
|
|
283
|
+
return errno;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// Close the file before renaming to make sure all data has
|
|
288
|
+
// been successfully written.
|
|
289
|
+
rc = close(tmpFD);
|
|
290
|
+
tmpFD = -1;
|
|
291
|
+
if (rc == -1) {
|
|
292
|
+
return errno;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
rc = rename(temporaryFilePathString.c_str(), filePathString.c_str());
|
|
296
|
+
if (rc == -1) {
|
|
297
|
+
return errno;
|
|
298
|
+
}
|
|
299
|
+
success = true;
|
|
300
|
+
return 0;
|
|
301
|
+
}
|
|
302
|
+
} // namespace
|
|
303
|
+
|
|
304
|
+
int writeFileAtomicNoThrow(
|
|
305
|
+
StringPiece filename,
|
|
306
|
+
iovec* iov,
|
|
307
|
+
int count,
|
|
308
|
+
mode_t permissions,
|
|
309
|
+
SyncType syncType) {
|
|
310
|
+
return writeFileAtomicNoThrowImpl(
|
|
311
|
+
filename,
|
|
312
|
+
iov,
|
|
313
|
+
count,
|
|
314
|
+
WriteFileAtomicOptions{}
|
|
315
|
+
.setPermissions(permissions)
|
|
316
|
+
.setSyncType(syncType));
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
int writeFileAtomicNoThrow(
|
|
320
|
+
StringPiece filename,
|
|
321
|
+
StringPiece data,
|
|
322
|
+
const WriteFileAtomicOptions& options) {
|
|
323
|
+
auto iov = getIOVecFor(ByteRange{data});
|
|
324
|
+
return writeFileAtomicNoThrowImpl(filename, &iov, 1, options);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
void writeFileAtomic(
|
|
328
|
+
StringPiece filename,
|
|
329
|
+
iovec* iov,
|
|
330
|
+
int count,
|
|
331
|
+
mode_t permissions,
|
|
332
|
+
SyncType syncType) {
|
|
333
|
+
auto rc = writeFileAtomicNoThrowImpl(
|
|
334
|
+
filename,
|
|
335
|
+
iov,
|
|
336
|
+
count,
|
|
337
|
+
WriteFileAtomicOptions{}
|
|
338
|
+
.setPermissions(permissions)
|
|
339
|
+
.setSyncType(syncType));
|
|
340
|
+
throwIfWriteFileAtomicFailed(__func__, filename, rc);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
void writeFileAtomic(
|
|
344
|
+
StringPiece filename,
|
|
345
|
+
ByteRange data,
|
|
346
|
+
mode_t permissions,
|
|
347
|
+
SyncType syncType) {
|
|
348
|
+
auto iov = getIOVecFor(data);
|
|
349
|
+
writeFileAtomic(filename, &iov, 1, permissions, syncType);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
void writeFileAtomic(
|
|
353
|
+
StringPiece filename,
|
|
354
|
+
StringPiece data,
|
|
355
|
+
mode_t permissions,
|
|
356
|
+
SyncType syncType) {
|
|
357
|
+
writeFileAtomic(filename, ByteRange(data), permissions, syncType);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
void writeFileAtomic(
|
|
361
|
+
StringPiece filename,
|
|
362
|
+
StringPiece data,
|
|
363
|
+
const WriteFileAtomicOptions& options) {
|
|
364
|
+
auto iov = getIOVecFor(ByteRange{data});
|
|
365
|
+
auto rc = writeFileAtomicNoThrowImpl(filename, &iov, 1, options);
|
|
366
|
+
|
|
367
|
+
throwIfWriteFileAtomicFailed(__func__, filename, rc);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
namespace {
|
|
371
|
+
iovec getIOVecFor(ByteRange byteRange) {
|
|
372
|
+
iovec iov;
|
|
373
|
+
iov.iov_base = const_cast<unsigned char*>(byteRange.data());
|
|
374
|
+
iov.iov_len = byteRange.size();
|
|
375
|
+
return iov;
|
|
376
|
+
}
|
|
377
|
+
} // namespace
|
|
378
|
+
} // namespace folly
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#pragma once
|
|
18
|
+
|
|
19
|
+
#include <sys/stat.h>
|
|
20
|
+
#include <sys/types.h>
|
|
21
|
+
|
|
22
|
+
#include <cassert>
|
|
23
|
+
#include <limits>
|
|
24
|
+
|
|
25
|
+
#include <folly/Portability.h>
|
|
26
|
+
#include <folly/Range.h>
|
|
27
|
+
#include <folly/ScopeGuard.h>
|
|
28
|
+
#include <folly/net/NetworkSocket.h>
|
|
29
|
+
#include <folly/portability/Fcntl.h>
|
|
30
|
+
#include <folly/portability/SysUio.h>
|
|
31
|
+
#include <folly/portability/Unistd.h>
|
|
32
|
+
|
|
33
|
+
namespace folly {
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Convenience wrappers around some commonly used system calls. The *NoInt
|
|
37
|
+
* wrappers retry on EINTR. The *Full wrappers retry on EINTR and also loop
|
|
38
|
+
* until all data is written. Note that *Full wrappers weaken the thread
|
|
39
|
+
* semantics of underlying system calls.
|
|
40
|
+
*/
|
|
41
|
+
int openNoInt(const char* name, int flags, mode_t mode = 0666);
|
|
42
|
+
// Two overloads, as we may be closing either a file or a socket.
|
|
43
|
+
int closeNoInt(int fd);
|
|
44
|
+
int closeNoInt(NetworkSocket fd);
|
|
45
|
+
int dupNoInt(int fd);
|
|
46
|
+
int dup2NoInt(int oldFd, int newFd);
|
|
47
|
+
int fsyncNoInt(int fd);
|
|
48
|
+
int fdatasyncNoInt(int fd);
|
|
49
|
+
int ftruncateNoInt(int fd, off_t len);
|
|
50
|
+
int truncateNoInt(const char* path, off_t len);
|
|
51
|
+
int flockNoInt(int fd, int operation);
|
|
52
|
+
int shutdownNoInt(NetworkSocket fd, int how);
|
|
53
|
+
|
|
54
|
+
ssize_t readNoInt(int fd, void* buf, size_t count);
|
|
55
|
+
ssize_t preadNoInt(int fd, void* buf, size_t count, off_t offset);
|
|
56
|
+
ssize_t readvNoInt(int fd, const iovec* iov, int count);
|
|
57
|
+
ssize_t preadvNoInt(int fd, const iovec* iov, int count, off_t offset);
|
|
58
|
+
|
|
59
|
+
ssize_t writeNoInt(int fd, const void* buf, size_t count);
|
|
60
|
+
ssize_t pwriteNoInt(int fd, const void* buf, size_t count, off_t offset);
|
|
61
|
+
ssize_t writevNoInt(int fd, const iovec* iov, int count);
|
|
62
|
+
ssize_t pwritevNoInt(int fd, const iovec* iov, int count, off_t offset);
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Wrapper around read() (and pread()) that, in addition to retrying on
|
|
66
|
+
* EINTR, will loop until all data is read.
|
|
67
|
+
*
|
|
68
|
+
* This wrapper is only useful for blocking file descriptors (for non-blocking
|
|
69
|
+
* file descriptors, you have to be prepared to deal with incomplete reads
|
|
70
|
+
* anyway), and only exists because POSIX allows read() to return an incomplete
|
|
71
|
+
* read if interrupted by a signal (instead of returning -1 and setting errno
|
|
72
|
+
* to EINTR).
|
|
73
|
+
*
|
|
74
|
+
* Note that this wrapper weakens the thread safety of read(): the file pointer
|
|
75
|
+
* is shared between threads, but the system call is atomic. If multiple
|
|
76
|
+
* threads are reading from a file at the same time, you don't know where your
|
|
77
|
+
* data came from in the file, but you do know that the returned bytes were
|
|
78
|
+
* contiguous. You can no longer make this assumption if using readFull().
|
|
79
|
+
* You should probably use pread() when reading from the same file descriptor
|
|
80
|
+
* from multiple threads simultaneously, anyway.
|
|
81
|
+
*
|
|
82
|
+
* Note that readvFull and preadvFull require iov to be non-const, unlike
|
|
83
|
+
* readv and preadv. The contents of iov after these functions return
|
|
84
|
+
* is unspecified.
|
|
85
|
+
*/
|
|
86
|
+
FOLLY_NODISCARD ssize_t readFull(int fd, void* buf, size_t count);
|
|
87
|
+
FOLLY_NODISCARD ssize_t
|
|
88
|
+
preadFull(int fd, void* buf, size_t count, off_t offset);
|
|
89
|
+
FOLLY_NODISCARD ssize_t readvFull(int fd, iovec* iov, int count);
|
|
90
|
+
FOLLY_NODISCARD ssize_t preadvFull(int fd, iovec* iov, int count, off_t offset);
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Similar to readFull and preadFull above, wrappers around write() and
|
|
94
|
+
* pwrite() that loop until all data is written.
|
|
95
|
+
*
|
|
96
|
+
* Generally, the write() / pwrite() system call may always write fewer bytes
|
|
97
|
+
* than requested, just like read(). In certain cases (such as when writing to
|
|
98
|
+
* a pipe), POSIX provides stronger guarantees, but not in the general case.
|
|
99
|
+
* For example, Linux (even on a 64-bit platform) won't write more than 2GB in
|
|
100
|
+
* one write() system call.
|
|
101
|
+
*
|
|
102
|
+
* Note that writevFull and pwritevFull require iov to be non-const, unlike
|
|
103
|
+
* writev and pwritev. The contents of iov after these functions return
|
|
104
|
+
* is unspecified.
|
|
105
|
+
*
|
|
106
|
+
* These functions return -1 on error, or the total number of bytes written
|
|
107
|
+
* (which is always the same as the number of requested bytes) on success.
|
|
108
|
+
*/
|
|
109
|
+
ssize_t writeFull(int fd, const void* buf, size_t count);
|
|
110
|
+
ssize_t pwriteFull(int fd, const void* buf, size_t count, off_t offset);
|
|
111
|
+
ssize_t writevFull(int fd, iovec* iov, int count);
|
|
112
|
+
ssize_t pwritevFull(int fd, iovec* iov, int count, off_t offset);
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Read entire file (if num_bytes is defaulted) or no more than
|
|
116
|
+
* num_bytes (otherwise) into container *out. The container is assumed
|
|
117
|
+
* to be contiguous, with element size equal to 1, and offer size(),
|
|
118
|
+
* reserve(), and random access (e.g. std::vector<char>, std::string,
|
|
119
|
+
* fbstring).
|
|
120
|
+
*
|
|
121
|
+
* Returns: true on success or false on failure. In the latter case
|
|
122
|
+
* errno will be set appropriately by the failing system primitive.
|
|
123
|
+
*/
|
|
124
|
+
template <class Container>
|
|
125
|
+
bool readFile(
|
|
126
|
+
int fd,
|
|
127
|
+
Container& out,
|
|
128
|
+
size_t num_bytes = std::numeric_limits<size_t>::max()) {
|
|
129
|
+
static_assert(
|
|
130
|
+
sizeof(out[0]) == 1,
|
|
131
|
+
"readFile: only containers with byte-sized elements accepted");
|
|
132
|
+
|
|
133
|
+
size_t soFar = 0; // amount of bytes successfully read
|
|
134
|
+
SCOPE_EXIT {
|
|
135
|
+
assert(out.size() >= soFar); // resize better doesn't throw
|
|
136
|
+
out.resize(soFar);
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
// Obtain file size:
|
|
140
|
+
struct stat buf;
|
|
141
|
+
if (fstat(fd, &buf) == -1) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
// Some files (notably under /proc and /sys on Linux) lie about
|
|
145
|
+
// their size, so treat the size advertised by fstat under advise
|
|
146
|
+
// but don't rely on it. In particular, if the size is zero, we
|
|
147
|
+
// should attempt to read stuff. If not zero, we'll attempt to read
|
|
148
|
+
// one extra byte.
|
|
149
|
+
constexpr size_t initialAlloc = 1024 * 4;
|
|
150
|
+
out.resize(std::min(
|
|
151
|
+
buf.st_size > 0 ? (size_t(buf.st_size) + 1) : initialAlloc, num_bytes));
|
|
152
|
+
|
|
153
|
+
while (soFar < out.size()) {
|
|
154
|
+
const auto actual = readFull(fd, &out[soFar], out.size() - soFar);
|
|
155
|
+
if (actual == -1) {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
soFar += actual;
|
|
159
|
+
if (soFar < out.size()) {
|
|
160
|
+
// File exhausted
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
// Ew, allocate more memory. Use exponential growth to avoid
|
|
164
|
+
// quadratic behavior. Cap size to num_bytes.
|
|
165
|
+
out.resize(std::min(out.size() * 3 / 2, num_bytes));
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Same as above, but takes in a file name instead of fd
|
|
173
|
+
*/
|
|
174
|
+
template <class Container>
|
|
175
|
+
bool readFile(
|
|
176
|
+
const char* file_name,
|
|
177
|
+
Container& out,
|
|
178
|
+
size_t num_bytes = std::numeric_limits<size_t>::max()) {
|
|
179
|
+
assert(file_name);
|
|
180
|
+
|
|
181
|
+
const auto fd = openNoInt(file_name, O_RDONLY | O_CLOEXEC);
|
|
182
|
+
if (fd == -1) {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
SCOPE_EXIT {
|
|
187
|
+
// Ignore errors when closing the file
|
|
188
|
+
closeNoInt(fd);
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
return readFile(fd, out, num_bytes);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Writes container to file. The container is assumed to be
|
|
196
|
+
* contiguous, with element size equal to 1, and offering STL-like
|
|
197
|
+
* methods empty(), size(), and indexed access
|
|
198
|
+
* (e.g. std::vector<char>, std::string, fbstring, StringPiece).
|
|
199
|
+
*
|
|
200
|
+
* "flags" dictates the open flags to use. Default is to create file
|
|
201
|
+
* if it doesn't exist and truncate it.
|
|
202
|
+
*
|
|
203
|
+
* Returns: true on success or false on failure. In the latter case
|
|
204
|
+
* errno will be set appropriately by the failing system primitive.
|
|
205
|
+
*
|
|
206
|
+
* Note that this function may leave the file in a partially written state on
|
|
207
|
+
* failure. Use writeFileAtomic() if you want to ensure that the existing file
|
|
208
|
+
* state will be unchanged on error.
|
|
209
|
+
*/
|
|
210
|
+
template <class Container>
|
|
211
|
+
bool writeFile(
|
|
212
|
+
const Container& data,
|
|
213
|
+
const char* filename,
|
|
214
|
+
int flags = O_WRONLY | O_CREAT | O_TRUNC,
|
|
215
|
+
mode_t mode = 0666) {
|
|
216
|
+
static_assert(
|
|
217
|
+
sizeof(data[0]) == 1, "writeFile works with element size equal to 1");
|
|
218
|
+
int fd = open(filename, flags, mode);
|
|
219
|
+
if (fd == -1) {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
bool ok = data.empty() ||
|
|
223
|
+
writeFull(fd, &data[0], data.size()) == static_cast<ssize_t>(data.size());
|
|
224
|
+
return closeNoInt(fd) == 0 && ok;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/* For atomic writes, do we sync to guarantee ordering or not? */
|
|
228
|
+
enum class SyncType {
|
|
229
|
+
WITH_SYNC,
|
|
230
|
+
WITHOUT_SYNC,
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
class WriteFileAtomicOptions {
|
|
234
|
+
public:
|
|
235
|
+
WriteFileAtomicOptions() = default;
|
|
236
|
+
|
|
237
|
+
mode_t permissions{0644};
|
|
238
|
+
SyncType syncType{SyncType::WITHOUT_SYNC};
|
|
239
|
+
std::string temporaryDirectory;
|
|
240
|
+
|
|
241
|
+
// The mode bits used for the temporary file
|
|
242
|
+
WriteFileAtomicOptions& setPermissions(mode_t);
|
|
243
|
+
|
|
244
|
+
// The default implementation does not sync the data to storage before the
|
|
245
|
+
// rename. Therefore, the write is *not* atomic in the event of a power
|
|
246
|
+
// failure or OS crash. To guarantee atomicity in these cases, specify
|
|
247
|
+
// syncType = WITH_SYNC, which will incur a performance cost of waiting for
|
|
248
|
+
// the data to be persisted to storage. Note that the return of the function
|
|
249
|
+
// does not guarantee the directory modifications have been written to disk; a
|
|
250
|
+
// further sync of the directory after the function returns is required to
|
|
251
|
+
// ensure the modification is durable.
|
|
252
|
+
WriteFileAtomicOptions& setSyncType(SyncType);
|
|
253
|
+
|
|
254
|
+
// The implementation creates a temporary file as an implementation detail
|
|
255
|
+
// within this directory. The temporary filenames themselves are
|
|
256
|
+
// implementation defined.
|
|
257
|
+
WriteFileAtomicOptions& setTemporaryDirectory(std::string);
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
/*
|
|
261
|
+
* writeFileAtomic() does not currently work on Windows.
|
|
262
|
+
* Windows does not provide atomic file renames, which makes implementing this
|
|
263
|
+
* tricky. Windows does have a MoveFileTransactedA() API which could
|
|
264
|
+
* potentially be used, but according to the Microsoft documentation this API is
|
|
265
|
+
* discouraged and may be removed in a future version.
|
|
266
|
+
*
|
|
267
|
+
* In order to implement this properly on Windows we would probably need a pair
|
|
268
|
+
* of functions: one for writing the file, and one for reading the contents,
|
|
269
|
+
* where the two functions synchronize with each other. We can probably only
|
|
270
|
+
* provide atomic update behavior with cooperation from the reader.
|
|
271
|
+
*/
|
|
272
|
+
#ifndef _WIN32
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Write file contents "atomically".
|
|
276
|
+
*
|
|
277
|
+
* This writes the data to a temporary file in the destination directory, and
|
|
278
|
+
* then renames it to the specified path. This guarantees that the specified
|
|
279
|
+
* file will be replaced the specified contents on success, or will not be
|
|
280
|
+
* modified on failure.
|
|
281
|
+
*
|
|
282
|
+
* Note that on platforms that do not provide atomic filesystem rename
|
|
283
|
+
* functionality (e.g., Windows) this behavior may not be truly atomic.
|
|
284
|
+
*
|
|
285
|
+
* The default implementation does not sync the data to storage before the
|
|
286
|
+
* rename. Therefore, the write is *not* atomic in the event of a power failure
|
|
287
|
+
* or OS crash. To guarantee atomicity in these cases, specify syncType =
|
|
288
|
+
* WITH_SYNC, which will incur a performance cost of waiting for the data to be
|
|
289
|
+
* persisted to storage. Note that the return of the function does not
|
|
290
|
+
* guarantee the directory modifications have been written to disk; a further
|
|
291
|
+
* sync of the directory after the function returns is required to ensure the
|
|
292
|
+
* modification is durable.
|
|
293
|
+
*/
|
|
294
|
+
void writeFileAtomic(
|
|
295
|
+
StringPiece filePath,
|
|
296
|
+
iovec* iov,
|
|
297
|
+
int count,
|
|
298
|
+
mode_t permissions = 0644,
|
|
299
|
+
SyncType syncType = SyncType::WITHOUT_SYNC);
|
|
300
|
+
void writeFileAtomic(
|
|
301
|
+
StringPiece filePath,
|
|
302
|
+
ByteRange data,
|
|
303
|
+
mode_t permissions = 0644,
|
|
304
|
+
SyncType syncType = SyncType::WITHOUT_SYNC);
|
|
305
|
+
void writeFileAtomic(
|
|
306
|
+
StringPiece filePath,
|
|
307
|
+
StringPiece data,
|
|
308
|
+
mode_t permissions = 0644,
|
|
309
|
+
SyncType syncType = SyncType::WITHOUT_SYNC);
|
|
310
|
+
|
|
311
|
+
void writeFileAtomic(
|
|
312
|
+
StringPiece filePath, StringPiece data, const WriteFileAtomicOptions&);
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* A version of writeFileAtomic() that returns an errno value instead of
|
|
316
|
+
* throwing on error.
|
|
317
|
+
*
|
|
318
|
+
* Returns 0 on success or an errno value on error.
|
|
319
|
+
*/
|
|
320
|
+
int writeFileAtomicNoThrow(
|
|
321
|
+
StringPiece filePath,
|
|
322
|
+
iovec* iov,
|
|
323
|
+
int count,
|
|
324
|
+
mode_t permissions = 0644,
|
|
325
|
+
SyncType syncType = SyncType::WITHOUT_SYNC);
|
|
326
|
+
|
|
327
|
+
int writeFileAtomicNoThrow(
|
|
328
|
+
StringPiece filePath, StringPiece data, const WriteFileAtomicOptions&);
|
|
329
|
+
|
|
330
|
+
#endif // !_WIN32
|
|
331
|
+
|
|
332
|
+
} // namespace folly
|