/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include #if defined(_WIN32) # include // DWORD #endif /** * @brief Result of the locking/unlocking file. * @note See @c cmFileLock */ class cmFileLockResult { public: #if defined(_WIN32) using Error = DWORD; #else using Error = int; #endif /** * @brief Successful lock/unlock. */ static cmFileLockResult MakeOk(); /** * @brief Lock/Unlock failed. Read error/GetLastError. */ static cmFileLockResult MakeSystem(); /** * @brief Lock/Unlock failed. Timeout reached. */ static cmFileLockResult MakeTimeout(); /** * @brief File already locked. */ static cmFileLockResult MakeAlreadyLocked(); /** * @brief Internal error. */ static cmFileLockResult MakeInternal(); /** * @brief Try to lock with function guard outside of the function */ static cmFileLockResult MakeNoFunction(); bool IsOk() const; std::string GetOutputMessage() const; private: enum ErrorType { OK, SYSTEM, TIMEOUT, ALREADY_LOCKED, INTERNAL, NO_FUNCTION }; cmFileLockResult(ErrorType type, Error errorValue); ErrorType Type; Error ErrorValue; };