本文整理汇总了C++中PathCharString::GetCount方法的典型用法代码示例。如果您正苦于以下问题:C++ PathCharString::GetCount方法的具体用法?C++ PathCharString::GetCount怎么用?C++ PathCharString::GetCount使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PathCharString
的用法示例。
在下文中一共展示了PathCharString::GetCount方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
PALIMPORT
BOOL
PALAPI
PAL_GetPALDirectoryA(
OUT LPSTR lpDirectoryName,
IN UINT* cchDirectoryName)
{
BOOL bRet;
PathCharString directory;
PERF_ENTRY(PAL_GetPALDirectoryA);
ENTRY( "PAL_GetPALDirectoryA( %p, %d )\n", lpDirectoryName, *cchDirectoryName );
bRet = PAL_GetPALDirectoryA(directory);
if (bRet)
{
if (directory.GetCount() > *cchDirectoryName)
{
SetLastError( ERROR_INSUFFICIENT_BUFFER );
bRet = FALSE;
*cchDirectoryName = directory.GetCount();
}
else if (strcpy_s(lpDirectoryName, directory.GetCount(), directory.GetString()) == SAFECRT_SUCCESS)
{
}
else
{
bRet = FALSE;
}
}
LOGEXIT( "PAL_GetPALDirectoryA returns BOOL %d.\n", bRet);
PERF_EXIT(PAL_GetPALDirectoryA);
return bRet;
}
示例2: id
//.........这里部分代码省略.........
rmdir(*m_filePath);
}
if (m_acquiredCreationDeletionFileLock)
{
SharedMemoryManager::ReleaseCreationDeletionFileLock();
}
}
} autoCleanup;
SharedMemoryProcessDataHeader *processDataHeader = SharedMemoryManager::FindProcessDataHeader(&id);
if (processDataHeader != nullptr)
{
_ASSERTE(
processDataHeader->GetSharedDataTotalByteCount() ==
SharedMemorySharedDataHeader::DetermineTotalByteCount(sharedDataByteCount));
processDataHeader->IncRefCount();
return processDataHeader;
}
SharedMemoryManager::AcquireCreationDeletionFileLock();
autoCleanup.m_acquiredCreationDeletionFileLock = true;
// Create the session directory
SharedMemoryHelpers::VerifyStringOperation(SharedMemoryManager::CopySharedMemoryBasePath(filePath));
SharedMemoryHelpers::VerifyStringOperation(filePath.Append('/'));
SharedMemoryHelpers::VerifyStringOperation(id.AppendSessionDirectoryName(filePath));
if (!SharedMemoryHelpers::EnsureDirectoryExists(filePath, true /* isGlobalLockAcquired */, createIfNotExist))
{
_ASSERTE(!createIfNotExist);
return nullptr;
}
autoCleanup.m_filePath = &filePath;
autoCleanup.m_sessionDirectoryPathCharCount = filePath.GetCount();
// Create or open the shared memory file
SharedMemoryHelpers::VerifyStringOperation(filePath.Append('/'));
SharedMemoryHelpers::VerifyStringOperation(filePath.Append(id.GetName(), id.GetNameCharCount()));
bool createdFile;
int fileDescriptor = SharedMemoryHelpers::CreateOrOpenFile(filePath, createIfNotExist, &createdFile);
if (fileDescriptor == -1)
{
_ASSERTE(!createIfNotExist);
return nullptr;
}
autoCleanup.m_createdFile = createdFile;
autoCleanup.m_fileDescriptor = fileDescriptor;
bool clearContents = false;
if (!createdFile)
{
// A shared file lock on the shared memory file would be held by any process that has opened the same file. Try to take
// an exclusive lock on the file. Successfully acquiring an exclusive lock indicates that no process has a reference to
// the shared memory file, and this process can reinitialize its contents.
if (SharedMemoryHelpers::TryAcquireFileLock(fileDescriptor, LOCK_EX | LOCK_NB))
{
// The shared memory file is not being used, flag it as created so that its contents will be reinitialized
SharedMemoryHelpers::ReleaseFileLock(fileDescriptor);
autoCleanup.m_createdFile = true;
if (!createIfNotExist)
{
return nullptr;
}
createdFile = true;
clearContents = true;
示例3: Close
void SharedMemoryProcessDataHeader::Close()
{
_ASSERTE(SharedMemoryManager::IsCreationDeletionProcessLockAcquired());
_ASSERTE(!SharedMemoryManager::IsCreationDeletionFileLockAcquired());
// If the ref count is nonzero, we are shutting down the process abruptly without having closed some shared memory objects.
// There could still be threads running with active references to the shared memory object. So when the ref count is
// nonzero, don't clean up any object or global process-local state.
if (m_refCount == 0)
{
SharedMemoryManager::RemoveProcessDataHeader(this);
}
struct AutoReleaseCreationDeletionFileLock
{
bool m_acquired;
AutoReleaseCreationDeletionFileLock() : m_acquired(false)
{
}
~AutoReleaseCreationDeletionFileLock()
{
if (m_acquired)
{
SharedMemoryManager::ReleaseCreationDeletionFileLock();
}
}
} autoReleaseCreationDeletionFileLock;
// A shared file lock on the shared memory file would be held by any process that has opened the same file. Try to take
// an exclusive lock on the file. Successfully acquiring an exclusive lock indicates that no process has a reference to
// the shared memory file, and this process can delete the file. File locks on the shared memory file are only ever acquired
// or released while holding the creation/deletion locks, so holding the creation/deletion locks while trying an exclusive
// lock on the shared memory file guarantees that another process cannot start using the shared memory file after this
// process has decided to delete the file.
bool releaseSharedData = false;
try
{
SharedMemoryManager::AcquireCreationDeletionFileLock();
autoReleaseCreationDeletionFileLock.m_acquired = true;
SharedMemoryHelpers::ReleaseFileLock(m_fileDescriptor);
if (SharedMemoryHelpers::TryAcquireFileLock(m_fileDescriptor, LOCK_EX | LOCK_NB))
{
SharedMemoryHelpers::ReleaseFileLock(m_fileDescriptor);
releaseSharedData = true;
}
}
catch (SharedMemoryException)
{
// Ignore the error, just don't release shared data
}
if (m_data != nullptr)
{
m_data->Close(m_refCount != 0 /* isAbruptShutdown */, releaseSharedData);
}
if (m_refCount == 0)
{
if (m_data != nullptr)
{
InternalDelete(m_data);
}
if (releaseSharedData)
{
m_sharedDataHeader->~SharedMemorySharedDataHeader();
}
munmap(m_sharedDataHeader, m_sharedDataTotalByteCount);
SharedMemoryHelpers::CloseFile(m_fileDescriptor);
}
if (!releaseSharedData)
{
return;
}
try
{
// Delete the shared memory file, and the session directory if it's not empty
PathCharString path;
SharedMemoryHelpers::VerifyStringOperation(SharedMemoryManager::CopySharedMemoryBasePath(path));
SharedMemoryHelpers::VerifyStringOperation(path.Append('/'));
SharedMemoryHelpers::VerifyStringOperation(m_id.AppendSessionDirectoryName(path));
SharedMemoryHelpers::VerifyStringOperation(path.Append('/'));
SIZE_T sessionDirectoryPathCharCount = path.GetCount();
SharedMemoryHelpers::VerifyStringOperation(path.Append(m_id.GetName(), m_id.GetNameCharCount()));
unlink(path);
path.CloseBuffer(sessionDirectoryPathCharCount);
rmdir(path);
}
catch (SharedMemoryException)
{
// Ignore the error, just don't release shared data
}
}
示例4: ENTRY
/*++
Function:
CreateDirectoryA
Note:
lpSecurityAttributes always NULL.
See MSDN doc.
--*/
BOOL
PALAPI
CreateDirectoryA(
IN LPCSTR lpPathName,
IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
{
BOOL bRet = FALSE;
DWORD dwLastError = 0;
PathCharString realPath;
char* realPathBuf;
LPSTR unixPathName = NULL;
int pathLength;
int i;
const int mode = S_IRWXU | S_IRWXG | S_IRWXO;
PERF_ENTRY(CreateDirectoryA);
ENTRY("CreateDirectoryA(lpPathName=%p (%s), lpSecurityAttr=%p)\n",
lpPathName?lpPathName:"NULL",
lpPathName?lpPathName:"NULL", lpSecurityAttributes);
if ( lpSecurityAttributes )
{
ASSERT("lpSecurityAttributes is not NULL as it should be\n");
dwLastError = ERROR_INVALID_PARAMETER;
goto done;
}
// Windows returns ERROR_PATH_NOT_FOUND when called with NULL.
// If we don't have this check, strdup(NULL) segfaults.
if (lpPathName == NULL)
{
ERROR("CreateDirectoryA called with NULL pathname!\n");
dwLastError = ERROR_PATH_NOT_FOUND;
goto done;
}
unixPathName = PAL__strdup(lpPathName);
if (unixPathName == NULL )
{
ERROR("PAL__strdup() failed\n");
dwLastError = ERROR_NOT_ENOUGH_MEMORY;
goto done;
}
FILEDosToUnixPathA( unixPathName );
// Remove any trailing slashes at the end because mkdir might not
// handle them appropriately on all platforms.
pathLength = strlen(unixPathName);
i = pathLength;
while(i > 1)
{
if(unixPathName[i - 1] =='/')
{
unixPathName[i - 1]='\0';
i--;
}
else
{
break;
}
}
// Get an absolute path.
if (unixPathName[0] == '/')
{
realPathBuf = unixPathName;
}
else
{
DWORD len = GetCurrentDirectoryA(realPath);
if (len == 0 || !realPath.Reserve(realPath.GetCount() + pathLength + 1 ))
{
dwLastError = DIRGetLastErrorFromErrno();
WARN("Getcwd failed with errno=%d \n", dwLastError);
goto done;
}
realPath.Append("/", 1);
realPath.Append(unixPathName, pathLength);
realPathBuf = realPath.OpenStringBuffer(realPath.GetCount());
}
// Canonicalize the path so we can determine its length.
FILECanonicalizePath(realPathBuf);
if ( mkdir(realPathBuf, mode) != 0 )
{
TRACE("Creation of directory [%s] was unsuccessful, errno = %d.\n",
unixPathName, errno);
//.........这里部分代码省略.........