Leaked source code of windows server 2003
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.
 
 
 
 
 
 

446 lines
12 KiB

#include <stdio.h>
#include <fstream.h>
#include <windows.h>
#include <tchar.h>
#include "other.h"
extern int g_Flag_a;
extern int g_Flag_b;
extern int g_Flag_c;
extern int g_Flag_d;
extern int g_Flag_e;
extern int g_Flag_f;
extern TCHAR * g_Flag_f_Data;
extern int g_Flag_g;
extern int g_Flag_z;
extern TCHAR * g_Flag_z_Data;
void OutputToConsole(TCHAR *szInsertionStringFormat, TCHAR *szInsertionString)
{
TCHAR BigString[1000];
_stprintf(BigString,szInsertionStringFormat,szInsertionString);
_tprintf(BigString);
return;
}
void OutputToConsole(TCHAR *szInsertionStringFormat, int iTheInteger)
{
TCHAR BigString[1000];
_stprintf(BigString,szInsertionStringFormat,iTheInteger);
_tprintf(BigString);
return;
}
void OutputToConsole(TCHAR *szString)
{
_tprintf(szString);
return;
}
void DumpOutCommonEntries(MyFileList *pTheMasterFileList1, MyFileList *pTheMasterFileList2)
{
MyFileList *t = NULL;
MyFileList *t2 = NULL;
t = pTheMasterFileList1->next;
while (t != pTheMasterFileList1)
{
//
// Loop thru all of list 2 looking for this entry
//
t2 = pTheMasterFileList2->next;
while (t2 != pTheMasterFileList2)
{
if (0 == _tcsicmp(t->szFileNameEntry, t2->szFileNameEntry))
{
//OutputToConsole(_T("%s\r\n"),t->szFileNameEntry);
OutputToConsole(_T("%s\n"),t->szFileNameEntry);
}
t2 = t2->next;
}
// Get the next entry from list 2
t = t->next;
}
return;
}
void DumpOutLinkedFileList(MyFileList *pTheMasterFileList)
{
MyFileList *t = NULL;
t = pTheMasterFileList->next;
while (t != pTheMasterFileList)
{
//OutputToConsole(_T("%s\r\n"),t->szFileNameEntry);
OutputToConsole(_T("%s\n"),t->szFileNameEntry);
t = t->next;
}
return;
}
void DumpOutDifferences(MyFileList *pTheMasterFileList1, MyFileList *pTheMasterFileList2)
{
int iFound = FALSE;
MyFileList *t = NULL;
MyFileList *t2 = NULL;
// Loop thru list #1
t = pTheMasterFileList1->next;
while (t != pTheMasterFileList1)
{
//
// Loop thru all of list 2 looking for this entry
//
iFound = FALSE;
t2 = pTheMasterFileList2->next;
while (t2 != pTheMasterFileList2 && iFound != TRUE)
{
if (0 == _tcsicmp(t->szFileNameEntry, t2->szFileNameEntry))
{iFound = TRUE;}
t2 = t2->next;
}
if (FALSE == iFound)
{
//OutputToConsole(_T("%s\r\n"),t->szFileNameEntry);
OutputToConsole(_T("%s\n"),t->szFileNameEntry);
}
// Get the next entry from list 2
t = t->next;
}
// Loop thru list #2
t2 = pTheMasterFileList2->next;
while (t2 != pTheMasterFileList2)
{
//
// Loop thru all of list 2 looking for this entry
//
iFound = FALSE;
t = pTheMasterFileList1->next;
while (t != pTheMasterFileList1 && iFound != TRUE)
{
if (0 == _tcsicmp(t2->szFileNameEntry, t->szFileNameEntry))
{iFound = TRUE;}
t = t->next;
}
if (FALSE == iFound)
{
//OutputToConsole(_T("%s\r\n"),t2->szFileNameEntry);
OutputToConsole(_T("%s\n"),t2->szFileNameEntry);
}
// Get the next entry from list 2
t2 = t2->next;
}
return;
}
void ReadFileIntoList(LPTSTR szTheFileNameToOpen,MyFileList *pListToFill)
{
ifstream inputfile;
char fileinputbuffer[_MAX_PATH];
TCHAR UnicodeFileBuf[_MAX_PATH];
TCHAR UnicodeFileBuf_Real[_MAX_PATH];
TCHAR szDrive_only[_MAX_DRIVE];
TCHAR szPath_only[_MAX_PATH];
TCHAR szFilename_only[_MAX_FNAME];
TCHAR szFilename_ext_only[_MAX_EXT];
char szAnsiFileName[_MAX_PATH];
WideCharToMultiByte( CP_ACP, 0, (TCHAR*)szTheFileNameToOpen, -1, szAnsiFileName, _MAX_PATH, NULL, NULL );
// Read flat file and put into huge array
inputfile.open(szAnsiFileName, ios::in);
inputfile.getline(fileinputbuffer, sizeof(fileinputbuffer));
do
{
if (*fileinputbuffer)
{
// convert to unicode.
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)fileinputbuffer, -1, (LPTSTR) UnicodeFileBuf, _MAX_PATH);
_tcscpy(UnicodeFileBuf_Real, UnicodeFileBuf);
if (TRUE == g_Flag_c)
{
// take out the path and only store the filename.
_tsplitpath(UnicodeFileBuf, NULL, NULL, szFilename_only, szFilename_ext_only);
_tcscpy(UnicodeFileBuf_Real, szFilename_only);
_tcscat(UnicodeFileBuf_Real, szFilename_ext_only);
_tcscat(UnicodeFileBuf_Real, _T("\0\0"));
}
else if (TRUE == g_Flag_d)
{
// take out the path and only store the filename.
_tsplitpath(UnicodeFileBuf, szDrive_only, szPath_only, NULL, NULL);
_tcscpy(UnicodeFileBuf_Real, szDrive_only);
_tcscat(UnicodeFileBuf_Real, szPath_only);
_tcscat(UnicodeFileBuf_Real, _T("\0\0"));
}
//
// trim spaces or tabs from either side
//
if (TRUE == g_Flag_e)
{
TCHAR *p;
p = UnicodeFileBuf_Real;
_tcscpy(UnicodeFileBuf_Real,StripWhitespace(p));
}
//
// remove everything after the "=" character
//
#ifndef _WIN64
if (TRUE == g_Flag_f)
{
TCHAR *p = NULL;
TCHAR *pDest = NULL;
TCHAR MyDelim = _T('=');
p = UnicodeFileBuf_Real;
// check if there is a defined delimiter.
if( _tcsicmp((const wchar_t *) &g_Flag_f_Data, _T("") ) != 0)
{
MyDelim = (TCHAR) &g_Flag_f_Data[0];
}
pDest = _tcsrchr(p, MyDelim);
if (pDest){*pDest = _T('\0');}
}
#endif
//
// Trim any /r/n characters from the end.
//
TCHAR *p;
p = UnicodeFileBuf_Real;
_tcscpy(UnicodeFileBuf_Real,StripLineFeedReturns(p));
MyFileList *pNew = NULL;
pNew = (MyFileList *)calloc(1, sizeof(MyFileList));
if (pNew)
{
//OutputToConsole(_T("Entry=%s"),UnicodeFileBuf_Real);
_tcscpy(pNew->szFileNameEntry, UnicodeFileBuf_Real);
pNew->prev = NULL;
pNew->next = NULL;
}
// Add it in there.
AddToLinkedListFileList(pListToFill, pNew);
}
} while (inputfile.getline(fileinputbuffer, sizeof(fileinputbuffer)));
inputfile.close();
return;
}
void AddToLinkedListFileList(MyFileList *pMasterList,MyFileList *pEntryToadd)
{
MyFileList *pTempMasterList;
int i;
int bFound = FALSE;
BOOL fReplace = TRUE;
if (!pEntryToadd) {return;}
pTempMasterList = pMasterList->next;
while (pTempMasterList != pMasterList)
{
i = _tcsicmp(pTempMasterList->szFileNameEntry, pEntryToadd->szFileNameEntry);
// if the next entry in the list is less than what we have.
// then
if (i < 0)
{
pTempMasterList = pTempMasterList->next;
// continue
}
if (i == 0)
{
if (fReplace)
{
// replace pTempMasterList
pEntryToadd->next = pTempMasterList->next;
pEntryToadd->prev = pTempMasterList->prev;
(pTempMasterList->prev)->next = pEntryToadd;
(pTempMasterList->next)->prev = pEntryToadd;
free(pTempMasterList);
}
else
{
// don't replace pTempMasterList
free(pEntryToadd);
}
return;
}
if (i > 0)
{
// location found: insert before pTempMasterList
break;
}
}
// insert before pTempMasterList
pEntryToadd->next = pTempMasterList;
pEntryToadd->prev = pTempMasterList->prev;
(pTempMasterList->prev)->next = pEntryToadd;
pTempMasterList->prev = pEntryToadd;
return;
}
void FreeLinkedFileList(MyFileList *pList)
{
if (!pList) {return;}
MyFileList *t = NULL, *p = NULL;
t = pList->next;
while (t != pList)
{
p = t->next;
free(t);
t = p;
}
t->prev = t;
t->next = t;
return;
}
BOOL IsFileExist(LPCTSTR szFile)
{
// Check if the file has expandable Environment strings
LPTSTR pch = NULL;
pch = _tcschr( (LPTSTR) szFile, _T('%'));
if (pch)
{
TCHAR szValue[_MAX_PATH];
_tcscpy(szValue,szFile);
if (!ExpandEnvironmentStrings( (LPCTSTR)szFile, szValue, _MAX_PATH))
{_tcscpy(szValue,szFile);}
return (GetFileAttributes(szValue) != 0xFFFFFFFF);
}
else
{
return (GetFileAttributes(szFile) != 0xFFFFFFFF);
}
}
//***************************************************************************
//* NAME: StripWhitespace *
//* SYNOPSIS: Strips spaces and tabs from both sides of given string. *
//***************************************************************************
LPSTR StripWhitespaceA( LPSTR pszString )
{
LPSTR pszTemp = NULL;
if ( pszString == NULL ) {
return NULL;
}
while ( *pszString == ' ' || *pszString == '\t' ) {
pszString += 1;
}
// Catch case where string consists entirely of whitespace or empty string.
if ( *pszString == '\0' ) {
return pszString;
}
pszTemp = pszString;
pszString += lstrlenA(pszString) - 1;
while ( *pszString == ' ' || *pszString == '\t' ) {
*pszString = '\0';
pszString -= 1;
}
return pszTemp;
}
//***************************************************************************
//* NAME: StripWhitespace *
//* SYNOPSIS: Strips spaces and tabs from both sides of given string. *
//***************************************************************************
LPTSTR StripWhitespace(LPTSTR pszString )
{
LPTSTR pszTemp = NULL;
if ( pszString == NULL ) {
return NULL;
}
while ( *pszString == _T(' ') || *pszString == _T('\t') ) {
pszString += 1;
}
// Catch case where string consists entirely of whitespace or empty string.
if ( *pszString == _T('\0') ) {
return pszString;
}
pszTemp = pszString;
pszString += lstrlenW(pszString) - 1;
while ( *pszString == _T(' ') || *pszString == _T('\t') ) {
*pszString = _T('\0');
pszString -= 1;
}
return pszTemp;
}
//***************************************************************************
//* NAME: StripLineFeedReturns *
//* SYNOPSIS: Strips linefeeds and returns from both sides of given string*
//***************************************************************************
LPTSTR StripLineFeedReturns(LPTSTR pszString )
{
LPTSTR pszTemp = NULL;
if ( pszString == NULL ) {
return NULL;
}
while ( *pszString == _T('\n') || *pszString == _T('\r') ) {
pszString += 1;
}
// Catch case where string consists entirely of whitespace or empty string.
if ( *pszString == _T('\0') ) {
return pszString;
}
pszTemp = pszString;
pszString += lstrlenW(pszString) - 1;
while ( *pszString == _T('\n') || *pszString == _T('\r') ) {
*pszString = _T('\0');
pszString -= 1;
}
return pszTemp;
}