//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1993. // // File: fbstr.cxx // // Contents: Wrappers around BSTR api to account for wierdness with NULL // // Functions: ADsAllocString // ADsAllocStringLen // ADsReAllocString // ADsReAllocStringLen // ADsFreeString // ADsStringLen // ADsStringByteLen // ADsAllocStringByteLen // ADsStringCmp // ADsStringNCmp // ADsStringICmp // ADsStringNICmp // // History: 25-Oct-94 krishnag // // //---------------------------------------------------------------------------- #include "procs.hxx" //+--------------------------------------------------------------------------- // // Function: ADsAllocString // // Synopsis: Allocs a BSTR and initializes it from a string. If the // initializer is NULL or the empty string, the resulting bstr is // NULL. // // Arguments: [pch] -- String to initialize BSTR. // [pBSTR] -- The result. // // Returns: HRESULT. // // Modifies: [pBSTR] // // History: 5-06-94 adams Created // //---------------------------------------------------------------------------- STDAPI ADsAllocString(const OLECHAR * pch, BSTR * pBSTR) { HRESULT hr = S_OK; ADsAssert(pBSTR); if (!pch) { *pBSTR = NULL; return S_OK; } *pBSTR = SysAllocString(pch); hr = (*pBSTR) ? S_OK : E_OUTOFMEMORY; RRETURN(hr); } //+--------------------------------------------------------------------------- // // Function: ADsAllocStringLen // // Synopsis: Allocs a BSTR of [uc] + 1 OLECHARS, and // initializes it from an optional string. If [uc] == 0, the // resulting bstr is NULL. // // Arguments: [pch] -- String to initialize. // [uc] -- Count of characters of string. // [pBSTR] -- The result. // // Returns: HRESULT. // // Modifies: [pBSTR]. // // History: 5-06-94 adams Created // //---------------------------------------------------------------------------- STDAPI ADsAllocStringLen(const OLECHAR * pch, UINT uc, BSTR * pBSTR) { HRESULT hr = S_OK; ADsAssert(pBSTR); if (!pch){ *pBSTR = NULL; return S_OK; } *pBSTR = SysAllocStringLen(pch, uc); hr = *pBSTR ? S_OK : E_OUTOFMEMORY; RRETURN(hr); } //+--------------------------------------------------------------------------- // // Function: ADsReAllocString // // Synopsis: Allocates a BSTR initialized from a string; if successful, // frees the original string and replaces it. // // Arguments: [pBSTR] -- String to reallocate. // [pch] -- Initializer. // // Returns: HRESULT. // // Modifies: [pBSTR]. // // History: 5-06-94 adams Created // //---------------------------------------------------------------------------- STDAPI ADsReAllocString(BSTR * pBSTR, const OLECHAR * pch) { ADsAssert(pBSTR); #if DBG == 1 HRESULT hr; BSTR bstrTmp; hr = ADsAllocString(pch, &bstrTmp); if (hr) RRETURN(hr); ADsFreeString(*pBSTR); *pBSTR = bstrTmp; return S_OK; #else if (!pch){ SysFreeString(*pBSTR); *pBSTR = NULL; return S_OK; } return SysReAllocString(pBSTR, pch) ? S_OK : E_OUTOFMEMORY; #endif } //+--------------------------------------------------------------------------- // // Function: ADsReAllocStringLen // // Synopsis: Allocates a BSTR of [uc] + 1 OLECHARs and optionally // initializes it from a string; if successful, frees the original // string and replaces it. // // Arguments: [pBSTR] -- String to reallocate. // [pch] -- Initializer. // [uc] -- Count of characters. // // Returns: HRESULT. // // Modifies: [pBSTR]. // // History: 5-06-94 adams Created // //---------------------------------------------------------------------------- STDAPI ADsReAllocStringLen(BSTR * pBSTR, const OLECHAR * pch, UINT uc) { ADsAssert(pBSTR); #if DBG == 1 HRESULT hr; BSTR bstrTmp; hr = ADsAllocStringLen(pch, uc, &bstrTmp); if (hr) RRETURN(hr); ADsFreeString(*pBSTR); *pBSTR = bstrTmp; return S_OK; #else if (!pch){ SysFreeString(*pBSTR); *pBSTR = NULL; return S_OK; } return SysReAllocStringLen(pBSTR, pch, uc) ? S_OK : E_OUTOFMEMORY; #endif } //+--------------------------------------------------------------------------- // // Function: ADsStringLen // // Synopsis: Returns the length of the BSTR. // // History: 5-06-94 adams Created // //---------------------------------------------------------------------------- STDAPI_(UINT) ADsStringLen(BSTR bstr) { return bstr ? SysStringLen(bstr) : 0; } #ifdef WIN32 //+--------------------------------------------------------------------------- // // Function: ADsStringByteLen // // Synopsis: Returns the length of a BSTR in bytes. // // History: 5-06-94 adams Created // //---------------------------------------------------------------------------- STDAPI_(UINT) ADsStringByteLen(BSTR bstr) { return bstr ? SysStringByteLen(bstr) : 0; } //+--------------------------------------------------------------------------- // // Function: ADsAllocStringByteLen // // Synopsis: Allocates a BSTR of [uc] + 1 chars and optionally initializes // from a string. If [uc] = 0, the resulting bstr is NULL. // // Arguments: [pch] -- Initializer. // [uc] -- Count of chars. // [pBSTR] -- Result. // // Returns: HRESULT. // // Modifies: [pBSTR]. // // History: 5-06-94 adams Created // //---------------------------------------------------------------------------- STDAPI ADsAllocStringByteLen(const char * pch, UINT uc, BSTR * pBSTR) { HRESULT hr = S_OK; ADsAssert(pBSTR); if (!pch){ *pBSTR = NULL; return S_OK; } *pBSTR = SysAllocStringByteLen(pch, uc); RRETURN(hr); } #endif //+--------------------------------------------------------------------------- // // Function: ADsStringCmp // // Synopsis: As per wcscmp, checking for NULL bstrs. // // History: 5-06-94 adams Created // 25-Jun-94 doncl changed from _tc to wc // //---------------------------------------------------------------------------- STDAPI_(int) ADsStringCmp(CBSTR bstr1, CBSTR bstr2) { return wcscmp(STRVAL(bstr1), STRVAL(bstr2)); } //+--------------------------------------------------------------------------- // // Function: ADsStringNCmp // // Synopsis: As per wcsncmp, checking for NULL bstrs. // // History: 5-06-94 adams Created // 25-Jun-94 doncl changed from _tc to wc // //---------------------------------------------------------------------------- STDAPI_(int) ADsStringNCmp(CBSTR bstr1, CBSTR bstr2, size_t c) { return wcsncmp(STRVAL(bstr1), STRVAL(bstr2), c); } //+--------------------------------------------------------------------------- // // Function: ADsStringICmp // // Synopsis: As per wcsicmp, checking for NULL bstrs. // // History: 5-06-94 adams Created // 25-Jun-94 doncl changed from _tc to wc // 15-Aug-94 doncl changed from wcsicmp to _wcsicmp // //---------------------------------------------------------------------------- STDAPI_(int) ADsStringICmp(CBSTR bstr1, CBSTR bstr2) { return _wcsicmp(STRVAL(bstr1), STRVAL(bstr2)); } //+--------------------------------------------------------------------------- // // Function: ADsStringNICmp // // Synopsis: As per wcsnicmp, checking for NULL bstrs. // // History: 5-06-94 adams Created // 25-Jun-94 doncl changed from _tc to wc // 15-Aug-94 doncl changed from wcsnicmp to _wcsnicmp // //---------------------------------------------------------------------------- STDAPI_(int) ADsStringNICmp(CBSTR bstr1, CBSTR bstr2, size_t c) { return _wcsnicmp(STRVAL(bstr1), STRVAL(bstr2), c); }