mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 14:26:09 +03:00
56 lines
1.7 KiB
C
56 lines
1.7 KiB
C
|
// Copyright 2018 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_SCOPED_CLEAR_LAST_ERROR_H_
|
||
|
#define BASE_SCOPED_CLEAR_LAST_ERROR_H_
|
||
|
|
||
|
#include <errno.h>
|
||
|
|
||
|
#include "base/base_export.h"
|
||
|
#include "build/build_config.h"
|
||
|
|
||
|
namespace base {
|
||
|
|
||
|
// ScopedClearLastError stores and resets the value of thread local error codes
|
||
|
// (errno, GetLastError()), and restores them in the destructor. This is useful
|
||
|
// to avoid side effects on these values in instrumentation functions that
|
||
|
// interact with the OS.
|
||
|
|
||
|
// Common implementation of ScopedClearLastError for all platforms. Use
|
||
|
// ScopedClearLastError instead.
|
||
|
class BASE_EXPORT ScopedClearLastErrorBase {
|
||
|
public:
|
||
|
ScopedClearLastErrorBase() : last_errno_(errno) { errno = 0; }
|
||
|
ScopedClearLastErrorBase(const ScopedClearLastErrorBase&) = delete;
|
||
|
ScopedClearLastErrorBase& operator=(const ScopedClearLastErrorBase&) = delete;
|
||
|
~ScopedClearLastErrorBase() { errno = last_errno_; }
|
||
|
|
||
|
private:
|
||
|
const int last_errno_;
|
||
|
};
|
||
|
|
||
|
#if BUILDFLAG(IS_WIN)
|
||
|
|
||
|
// Windows specific implementation of ScopedClearLastError.
|
||
|
class BASE_EXPORT ScopedClearLastError : public ScopedClearLastErrorBase {
|
||
|
public:
|
||
|
ScopedClearLastError();
|
||
|
ScopedClearLastError(const ScopedClearLastError&) = delete;
|
||
|
ScopedClearLastError& operator=(const ScopedClearLastError&) = delete;
|
||
|
~ScopedClearLastError();
|
||
|
|
||
|
private:
|
||
|
const unsigned long last_system_error_;
|
||
|
};
|
||
|
|
||
|
#elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
|
||
|
|
||
|
using ScopedClearLastError = ScopedClearLastErrorBase;
|
||
|
|
||
|
#endif // BUILDFLAG(IS_WIN)
|
||
|
|
||
|
} // namespace base
|
||
|
|
||
|
#endif // BASE_SCOPED_CLEAR_LAST_ERROR_H_
|