97841dad2b
Convert the StringToInt helper into a StringToLong helper with a 'long' result type. This will make the helper more useful to other callers that want to use strtol. While at it, also check errno after calling strtol in case the conversion fails with a range error.
103 lines
2.4 KiB
C++
103 lines
2.4 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 cmFileLockPool_h
|
|
#define cmFileLockPool_h
|
|
|
|
#include "cmStandardIncludes.h"
|
|
|
|
class cmFileLockResult;
|
|
class cmFileLock;
|
|
|
|
class cmFileLockPool
|
|
{
|
|
public:
|
|
cmFileLockPool();
|
|
~cmFileLockPool();
|
|
|
|
//@{
|
|
/**
|
|
* @brief Function scope control.
|
|
*/
|
|
void PushFunctionScope();
|
|
void PopFunctionScope();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* @brief File scope control.
|
|
*/
|
|
void PushFileScope();
|
|
void PopFileScope();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* @brief Lock the file in given scope.
|
|
* @param timeoutSec Lock timeout. If -1 try until success or fatal error.
|
|
*/
|
|
cmFileLockResult LockFunctionScope(
|
|
const std::string& filename, unsigned long timeoutSec
|
|
);
|
|
cmFileLockResult LockFileScope(
|
|
const std::string& filename, unsigned long timeoutSec
|
|
);
|
|
cmFileLockResult LockProcessScope(
|
|
const std::string& filename, unsigned long timeoutSec
|
|
);
|
|
//@}
|
|
|
|
/**
|
|
* @brief Unlock the file explicitly.
|
|
*/
|
|
cmFileLockResult Release(const std::string& filename);
|
|
|
|
private:
|
|
cmFileLockPool(const cmFileLockPool&);
|
|
cmFileLockPool& operator=(const cmFileLockPool&);
|
|
|
|
bool IsAlreadyLocked(const std::string& filename) const;
|
|
|
|
class ScopePool
|
|
{
|
|
public:
|
|
ScopePool();
|
|
~ScopePool();
|
|
|
|
cmFileLockResult Lock(
|
|
const std::string& filename, unsigned long timeoutSec
|
|
);
|
|
cmFileLockResult Release(const std::string& filename);
|
|
bool IsAlreadyLocked(const std::string& filename) const;
|
|
|
|
private:
|
|
ScopePool(const ScopePool&);
|
|
ScopePool& operator=(const ScopePool&);
|
|
|
|
typedef std::list<cmFileLock*> List;
|
|
typedef List::iterator It;
|
|
typedef List::const_iterator CIt;
|
|
|
|
List Locks;
|
|
};
|
|
|
|
typedef std::list<ScopePool*> List;
|
|
|
|
typedef List::iterator It;
|
|
typedef List::const_iterator CIt;
|
|
|
|
List FunctionScopes;
|
|
List FileScopes;
|
|
ScopePool ProcessScope;
|
|
};
|
|
|
|
#endif // cmFileLockPool_h
|