mirror of
https://github.com/reactos/CMake.git
synced 2024-12-05 02:06:34 +00:00
e6db4c5a4e
Provide options to fail without blocking or to block up to a timeout. Provide options to specify the scope containing the lock so it can be released automatically at the end of a function, file, or process. Extend the RunCMake.file test with cases covering the file(LOCK) command usage and error cases.
86 lines
1.8 KiB
C++
86 lines
1.8 KiB
C++
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2014 Ruslan Baratov
|
|
|
|
Distributed under the OSI-approved BSD License (the "License");
|
|
see accompanying file Copyright.txt for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the License for more information.
|
|
============================================================================*/
|
|
|
|
#ifndef cmFileLockResult_h
|
|
#define cmFileLockResult_h
|
|
|
|
#include "cmStandardIncludes.h"
|
|
|
|
#if defined(_WIN32)
|
|
# include <windows.h> // DWORD
|
|
#endif
|
|
|
|
/**
|
|
* @brief Result of the locking/unlocking file.
|
|
* @note See @c cmFileLock
|
|
*/
|
|
class cmFileLockResult
|
|
{
|
|
public:
|
|
#if defined(_WIN32)
|
|
typedef DWORD Error;
|
|
#else
|
|
typedef int Error;
|
|
#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;
|
|
};
|
|
|
|
#endif // cmFileLockResult_h
|