CMake/Source/cmFileLockResult.h
Ruslan Baratov e6db4c5a4e file: Add LOCK subcommand to do file and directory locking
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.
2014-12-03 09:47:44 -05:00

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