123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // Copyright 2014 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef BASE_FILES_SCOPED_FILE_H_
- #define BASE_FILES_SCOPED_FILE_H_
- #include <stdio.h>
- #include <memory>
- #include "base/base_export.h"
- #include "base/scoped_generic.h"
- #include "build/build_config.h"
- namespace base {
- namespace internal {
- #if defined(OS_ANDROID)
- // Use fdsan on android.
- struct BASE_EXPORT ScopedFDCloseTraits : public ScopedGenericOwnershipTracking {
- static int InvalidValue() { return -1; }
- static void Free(int);
- static void Acquire(const ScopedGeneric<int, ScopedFDCloseTraits>&, int);
- static void Release(const ScopedGeneric<int, ScopedFDCloseTraits>&, int);
- };
- #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
- struct BASE_EXPORT ScopedFDCloseTraits {
- static int InvalidValue() {
- return -1;
- }
- static void Free(int fd);
- };
- #endif
- // Functor for |ScopedFILE| (below).
- struct ScopedFILECloser {
- inline void operator()(FILE* x) const {
- if (x)
- fclose(x);
- }
- };
- } // namespace internal
- // -----------------------------------------------------------------------------
- #if defined(OS_POSIX) || defined(OS_FUCHSIA)
- // A low-level Posix file descriptor closer class. Use this when writing
- // platform-specific code, especially that does non-file-like things with the
- // FD (like sockets).
- //
- // If you're writing low-level Windows code, see base/win/scoped_handle.h
- // which provides some additional functionality.
- //
- // If you're writing cross-platform code that deals with actual files, you
- // should generally use base::File instead which can be constructed with a
- // handle, and in addition to handling ownership, has convenient cross-platform
- // file manipulation functions on it.
- typedef ScopedGeneric<int, internal::ScopedFDCloseTraits> ScopedFD;
- #endif
- // Automatically closes |FILE*|s.
- typedef std::unique_ptr<FILE, internal::ScopedFILECloser> ScopedFILE;
- } // namespace base
- #endif // BASE_FILES_SCOPED_FILE_H_
|