Listing 11: Shims returning NULL strings
/* /////////////////////////////////////////////////////////////
* Extract from stlsoft_string_access.h, atlstl_string_access.h,
* mfcstl_string_access.h
*
* www: http://stlsoft.org/, http://atlstl.org/
* http://mfcstl.org/
*
* Copyright (C) 2002, Synesis Software Pty Ltd.
* (Licensed under the Synesis Software Standard Source License:
* http://www.synesis.com.au/licenses/ssssl.html)
* ////////////////////////////////////////////////////////// */
namespace stlsoft
{
/* C-style ANSI string */
inline char const *c_str_ptr_null(char const *s)
{
return s;
}
/* std::basic_string */
template <class C>
inline C const *c_str_ptr_null(std::basic_string<C> const &s)
{
return (s.length() == 0) ? 0 : s.c_str();
}
} // namespace stlsoft
namespace atlstl
{
/* CComBSTR */
inline LPCOLESTR c_str_ptr_null(CComBSTR const &s)
{
/* NULL is a valid BSTR value, so may return that */
return s.m_str;
}
} // namespace atlstl
namespace mfcstl
{
/* CString */
inline LPCTSTR c_str_ptr_null(CString const &s)
{
/* CString always points to valid memory, whether its own
* CStringData or afxEmptyString.m_pchData
*/
return s.IsEmpty() ? NULL : (LPCTSTR)s;
}
} // namespace mfcstl