Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

103 lines
2.2 KiB

/***********************************************************************************************\
* FILE: CraneFl.c
*
* Code to load crane data ( QHEAD and QNODE ) from a file.
\***********************************************************************************************/
#include <stdio.h>
#include "common.h"
#include "crane.h"
#include "cranep.h"
// Load crane data from a file.
BOOL CraneLoadFile(
LOCRUN_INFO *pLocRunInfo,
CRANE_LOAD_INFO *pLoadInfo,
wchar_t *pwchPathName
) {
HANDLE hFile, hMap;
BYTE *pByte;
wchar_t aPath[128];
// Generate path to file.
FormatPath(aPath, pwchPathName, (wchar_t *)0, (wchar_t *)0, (wchar_t *)0, L"cart.dat");
hFile = CreateMappingCall(
aPath,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (hFile == INVALID_HANDLE_VALUE)
{
goto error1;
}
// Create a mapping handle
hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
if (hMap == NULL)
{
goto error2;
}
// Map the entire file starting at the first byte
pByte = (BYTE *) MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
if ( !pByte )
{
goto error3;
}
if ( !CraneLoadFromPointer(pLocRunInfo, gapqhList, gapqnList, pByte) )
{
goto error4;
}
// Save away the pointers so we can close up cleanly latter
pLoadInfo->pLoadInfo1 = hFile;
pLoadInfo->pLoadInfo2 = hMap;
pLoadInfo->pLoadInfo3 = pByte;
return TRUE;
// Error handling
error4:
UnmapViewOfFile(pByte);
pByte = NULL;
error3:
CloseHandle(hMap);
hMap = INVALID_HANDLE_VALUE;
error2:
CloseHandle(hFile);
hFile = INVALID_HANDLE_VALUE;
error1:
pLoadInfo->pLoadInfo1 = INVALID_HANDLE_VALUE;
pLoadInfo->pLoadInfo2 = INVALID_HANDLE_VALUE;
pLoadInfo->pLoadInfo3 = INVALID_HANDLE_VALUE;
return FALSE;
}
BOOL CraneUnLoadFile(CRANE_LOAD_INFO *pInfo)
{
if (pInfo->pLoadInfo1 == INVALID_HANDLE_VALUE ||
pInfo->pLoadInfo2 == INVALID_HANDLE_VALUE ||
pInfo->pLoadInfo3 == INVALID_HANDLE_VALUE) {
return FALSE;
}
UnmapViewOfFile(pInfo->pLoadInfo3);
CloseHandle(pInfo->pLoadInfo2);
CloseHandle(pInfo->pLoadInfo1);
pInfo->pLoadInfo1 = INVALID_HANDLE_VALUE;
pInfo->pLoadInfo2 = INVALID_HANDLE_VALUE;
pInfo->pLoadInfo3 = INVALID_HANDLE_VALUE;
return TRUE;
}