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.
|
|
/****************************************************************************/ /* */ /* enpenv.c - */ /* */ /* Routines for expanding environment strings */ /* */ /****************************************************************************/
#include "shellprv.h"
//-------------------------------------------------------------------------
// The given string is parsed and all environment variables
// are expanded. If the expansion doesn't over fill the buffer
// then the length of the new string will be returned in the
// hiword and TRUE in the low word. If the expansion would over
// fill the buffer then the original string is left unexpanded,
// the original length in the high word and FALSE in the low word.
// The length of the string is in bytes and excludes the terminating
// NULL.
//
// NOTE 1: This function must now handle environment variables in Quotes
//
// NOTE 2: There is no need for this API since NT has the equivalent APIs such
// as ExpandEnvironmentStrings. But must keep it since it is a public
// API in Win3.1.
// Instead of doing all the work here, just call ExpandEnvironmentStrings.
//-------------------------------------------------------------------------
DWORD APIENTRY DoEnvironmentSubstA( LPSTR pszSrc, // The input string.
UINT cchSrc) // The limit of characters in the input string inc null.
{ LPSTR pszExp; DWORD cchExp; BOOL fRet = FALSE; pszExp = (LPSTR)LocalAlloc(LPTR, cchSrc); if (pszExp) { cchExp = SHExpandEnvironmentStringsA(pszSrc, pszExp, cchSrc); if (cchExp) { StrCpyA(pszSrc, pszExp); fRet = TRUE; } LocalFree(pszExp); }
if (fRet) return MAKELONG(cchExp,TRUE); else return MAKELONG(cchSrc,FALSE); }
#ifdef UNICODE // on Win9x platform, shlunimp.c provides the implementation
DWORD APIENTRY DoEnvironmentSubstW( LPWSTR pszSrc, // The input string.
UINT cchSrc) // The limit of characters in the input string inc null.
{ LPWSTR pszExp; DWORD cchExp; BOOL fRet = FALSE; pszExp = (LPWSTR)LocalAlloc(LPTR, cchSrc * sizeof(WCHAR)); if (pszExp) { cchExp = SHExpandEnvironmentStringsW(pszSrc, pszExp, cchSrc); if (cchExp) { StrCpyW(pszSrc, pszExp); fRet = TRUE; } LocalFree(pszExp); }
if (fRet) return MAKELONG(cchExp,TRUE); else return MAKELONG(cchSrc,FALSE); } #endif
|