mirror of https://github.com/tongzx/nt5src
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.
157 lines
3.7 KiB
157 lines
3.7 KiB
#include "utils.h"
|
|
|
|
//***************************************************************************
|
|
//*
|
|
//* purpose:
|
|
//*
|
|
//***************************************************************************
|
|
LPSTR StripWhitespace( 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;
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
//*
|
|
//* purpose: return back a Alocated wide string from a ansi string
|
|
//* caller must free the returned back pointer with GlobalFree()
|
|
//*
|
|
//***************************************************************************
|
|
LPWSTR MakeWideStrFromAnsi(UINT uiCodePage, LPSTR psz)
|
|
{
|
|
LPWSTR pwsz;
|
|
int i;
|
|
|
|
// make sure they gave us something
|
|
if (!psz)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
// compute the length
|
|
i = MultiByteToWideChar(uiCodePage, 0, psz, -1, NULL, 0);
|
|
if (i <= 0) return NULL;
|
|
|
|
// allocate memory in that length
|
|
pwsz = (LPWSTR) GlobalAlloc(GPTR,i * sizeof(WCHAR));
|
|
if (!pwsz) return NULL;
|
|
|
|
// clear out memory
|
|
memset(pwsz, 0, wcslen(pwsz) * sizeof(WCHAR));
|
|
|
|
// convert the ansi string into unicode
|
|
i = MultiByteToWideChar(uiCodePage, 0, (LPSTR) psz, -1, pwsz, i);
|
|
if (i <= 0)
|
|
{
|
|
GlobalFree(pwsz);
|
|
pwsz = NULL;
|
|
return NULL;
|
|
}
|
|
|
|
// make sure ends with null
|
|
pwsz[i - 1] = 0;
|
|
|
|
// return the pointer
|
|
return pwsz;
|
|
}
|
|
|
|
|
|
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, sizeof(szValue)/sizeof(TCHAR)))
|
|
{_tcscpy(szValue,szFile);}
|
|
|
|
return (GetFileAttributes(szValue) != 0xFFFFFFFF);
|
|
}
|
|
else
|
|
{
|
|
return (GetFileAttributes(szFile) != 0xFFFFFFFF);
|
|
}
|
|
}
|
|
|
|
|
|
void AddPath(LPTSTR szPath, LPCTSTR szName )
|
|
{
|
|
LPTSTR p = szPath;
|
|
|
|
// Find end of the string
|
|
while (*p){p = _tcsinc(p);}
|
|
|
|
// If no trailing backslash then add one
|
|
if (*(_tcsdec(szPath, p)) != _T('\\'))
|
|
{_tcscat(szPath, _T("\\"));}
|
|
|
|
// if there are spaces precluding szName, then skip
|
|
while ( *szName == ' ' ) szName = _tcsinc(szName);;
|
|
|
|
// Add new name to existing path string
|
|
_tcscat(szPath, szName);
|
|
}
|
|
|
|
|
|
|
|
int DoesThisSectionExist(IN HINF hFile, IN LPCTSTR szTheSection)
|
|
{
|
|
int iReturn = FALSE;
|
|
|
|
INFCONTEXT Context;
|
|
|
|
// go to the beginning of the section in the INF file
|
|
if (SetupFindFirstLine(hFile, szTheSection, NULL, &Context))
|
|
{iReturn = TRUE;}
|
|
|
|
return iReturn;
|
|
}
|
|
|
|
void DoExpandEnvironmentStrings(LPTSTR szFile)
|
|
{
|
|
TCHAR szValue[_MAX_PATH];
|
|
_tcscpy(szValue,szFile);
|
|
// Check if the file has expandable Environment strings
|
|
LPTSTR pch = NULL;
|
|
pch = _tcschr( (LPTSTR) szFile, _T('%'));
|
|
if (pch)
|
|
{
|
|
if (!ExpandEnvironmentStrings( (LPCTSTR)szFile, szValue, sizeof(szValue)/sizeof(TCHAR)))
|
|
{
|
|
_tcscpy(szValue,szFile);
|
|
}
|
|
}
|
|
_tcscpy(szFile,szValue);
|
|
return;
|
|
}
|