1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_APPLE_SCOPED_CFFILEDESCRIPTORREF_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_APPLE_SCOPED_CFFILEDESCRIPTORREF_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <CoreFoundation/CoreFoundation.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "base/scoped_generic.h" 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker namespace base::apple { 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Worker namespace internal { 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker struct ScopedCFFileDescriptorRefTraits { InvalidValueScopedCFFileDescriptorRefTraits17*6777b538SAndroid Build Coastguard Worker static CFFileDescriptorRef InvalidValue() { return nullptr; } FreeScopedCFFileDescriptorRefTraits18*6777b538SAndroid Build Coastguard Worker static void Free(CFFileDescriptorRef ref) { 19*6777b538SAndroid Build Coastguard Worker CFFileDescriptorInvalidate(ref); 20*6777b538SAndroid Build Coastguard Worker CFRelease(ref); 21*6777b538SAndroid Build Coastguard Worker } 22*6777b538SAndroid Build Coastguard Worker }; 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker } // namespace internal 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker // ScopedCFFileDescriptorRef is designed after ScopedCFTypeRef<>. On 27*6777b538SAndroid Build Coastguard Worker // destruction, it will invalidate the file descriptor. 28*6777b538SAndroid Build Coastguard Worker // ScopedCFFileDescriptorRef (unlike ScopedCFTypeRef<>) does not support RETAIN 29*6777b538SAndroid Build Coastguard Worker // semantics, copying, or assignment, as doing so would increase the chances 30*6777b538SAndroid Build Coastguard Worker // that a file descriptor is invalidated while still in use. 31*6777b538SAndroid Build Coastguard Worker using ScopedCFFileDescriptorRef = 32*6777b538SAndroid Build Coastguard Worker ScopedGeneric<CFFileDescriptorRef, 33*6777b538SAndroid Build Coastguard Worker internal::ScopedCFFileDescriptorRefTraits>; 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker } // namespace base::apple 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker #endif // BASE_APPLE_SCOPED_CFFILEDESCRIPTORREF_H_ 38