Author: tkreuzer
Date: Mon Apr 26 02:41:09 2010
New Revision: 47026
URL:
http://svn.reactos.org/svn/reactos?rev=47026&view=rev
Log:
[STRSAFE]
Add strsafe.h from amd64 branch.
Added:
trunk/reactos/include/psdk/strsafe.h (with props)
Added: trunk/reactos/include/psdk/strsafe.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/strsafe.h?rev…
==============================================================================
--- trunk/reactos/include/psdk/strsafe.h (added)
+++ trunk/reactos/include/psdk/strsafe.h [iso-8859-1] Mon Apr 26 02:41:09 2010
@@ -1,0 +1,626 @@
+#ifndef __STRSAFE_H_
+#define __STRSAFE_H_
+
+#include <stdlib.h>
+#include <stdarg.h>
+
+#if defined(STRSAFE_NO_CCH_FUNCTIONS) && defined(STRSAFE_NO_CB_FUNCTIONS)
+#error Both STRSAFE_NO_CCH_FUNCTIONS and STRSAFE_NO_CB_FUNCTIONS are defined
+#endif
+
+#ifndef SUCCEEDED
+#define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
+#endif
+#define STRSAFE_MAX_CCH 2147483647
+#define STRSAFE_E_INVALID_PARAMETER ((HRESULT)0x80070057L)
+#define STRSAFE_E_INSUFFICIENT_BUFFER ((HRESULT)0x8007007AL)
+#define STRSAFE_E_END_OF_FILE ((HRESULT)0x80070026L)
+
+#define STRSAFE_FILL_BEHIND_NULL 0x00000200
+#define STRSAFE_IGNORE_NULLS 0x00000200
+#define STRSAFE_FILL_ON_FAILURE 0x00000400
+#define STRSAFE_NULL_ON_FAILURE 0x00000800
+#define STRSAFE_NO_TRUNCATION 0x00001000
+
+#ifndef S_OK
+#define S_OK ((HRESULT)0x00000000L)
+#endif
+
+#define STRSAFE_MIN(a,b) (((a) < (b))?(a):(b))
+
+#ifndef _HRESULT_DEFINED
+#define _HRESULT_DEFINED
+typedef long HRESULT;
+#endif
+
+typedef char * STRSAFE_LPSTR;
+typedef const char * STRSAFE_LPCSTR;
+typedef wchar_t * STRSAFE_LPWSTR;
+typedef const wchar_t * STRSAFE_LPCWSTR;
+typedef unsigned long STRSAFE_DWORD;
+
+#define STRSAFE_PASS2
+
+/* Implement Cb functions for ansi and unicode */
+#ifndef STRSAFE_NO_CB_FUNCTIONS
+#define STRSAFE_CB
+#define STRSAFE_UNICODE 0
+# include <strsafe.h>
+#undef STRSAFE_UNICODE
+#define STRSAFE_UNICODE 1
+# include <strsafe.h>
+#undef STRSAFE_UNICODE
+#undef STRSAFE_CB
+#endif // !STRSAFE_NO_CB_FUNCTIONS
+
+/* Implement Cch functions for ansi and unicode */
+#ifndef STRSAFE_NO_CCH_FUNCTIONS
+#define STRSAFE_UNICODE 0
+# include <strsafe.h>
+#undef STRSAFE_UNICODE
+#define STRSAFE_UNICODE 1
+# include <strsafe.h>
+#undef STRSAFE_UNICODE
+#endif // !STRSAFE_NO_CCH_FUNCTIONS
+
+#undef STRSAFE_PASS2
+
+/* Now define the functions depending on UNICODE */
+#if defined(UNICODE)
+# define STRSAFE_UNICODE 1
+#else
+# define STRSAFE_UNICODE 0
+#endif
+#include <strsafe.h>
+#undef STRSAFE_UNICODE
+
+#endif // !__STRSAFE_H_
+
+/*****************************************************************************/
+
+#if defined(STRSAFE_UNICODE)
+#if (STRSAFE_UNICODE == 1)
+
+#define STRSAFE_LPTSTR STRSAFE_LPWSTR
+#define STRSAFE_LPCTSTR STRSAFE_LPCWSTR
+#define STRSAFE_TCHAR wchar_t
+
+#define StringCbCat StringCbCatW
+#define StringCbCatEx StringCbCatExW
+#define StringCbCatN StringCbCatNW
+#define StringCbCatNEx StringCbCatNExW
+#define StringCbCatWorker StringCxxCatWorkerW
+#define StringCbCopy StringCbCopyW
+#define StringCbCopyEx StringCbCopyExW
+#define StringCbCopyN StringCbCopyNW
+#define StringCbCopyNEx StringCbCopyNExW
+#define StringCbGets StringCbGetsW
+#define StringCbGetsEx StringCbGetsExW
+#define StringCbLength StringCbLengthW
+#define StringCbPrintf StringCbPrintfW
+#define StringCbPrintfEx StringCbPrintfExW
+#define StringCbVPrintf StringCbVPrintfW
+#define StringCbVPrintfEx StringCbVPrintfExW
+#define StringCchCat StringCchCatW
+#define StringCchCatEx StringCchCatExW
+#define StringCchCatN StringCchCatNW
+#define StringCchCatNEx StringCchCatNExW
+#define StringCchCatWorker StringCchCatWorkerW
+#define StringCchCopy StringCchCopyW
+#define StringCchCopyEx StringCchCopyExW
+#define StringCchCopyN StringCchCopyNW
+#define StringCchCopyNEx StringCchCopyNExW
+#define StringCchGets StringCchGetsW
+#define StringCchGetsEx StringCchGetsExW
+#define StringCchLength StringCchLengthW
+#define StringCchPrintf StringCchPrintfW
+#define StringCchPrintfEx StringCchPrintfExW
+#define StringCchVPrintf StringCchVPrintfW
+#define StringCchVPrintfEx StringCchVPrintfExW
+#define _vsnprintfAW _vsnwprintf
+
+#else // (STRSAFE_UNICODE != 1)
+
+#define STRSAFE_LPTSTR STRSAFE_LPSTR
+#define STRSAFE_LPCTSTR STRSAFE_LPCSTR
+#define STRSAFE_TCHAR char
+
+#define StringCbCat StringCbCatA
+#define StringCbCatEx StringCbCatExA
+#define StringCbCatN StringCbCatNA
+#define StringCbCatNEx StringCbCatNExA
+#define StringCbCatWorker StringCxxCatWorkerA
+#define StringCbCopy StringCbCopyA
+#define StringCbCopyEx StringCbCopyExA
+#define StringCbCopyN StringCbCopyNA
+#define StringCbCopyNEx StringCbCopyNExA
+#define StringCbGets StringCbGetsA
+#define StringCbGetsEx StringCbGetsExA
+#define StringCbLength StringCbLengthA
+#define StringCbPrintf StringCbPrintfA
+#define StringCbPrintfEx StringCbPrintfExA
+#define StringCbVPrintf StringCbVPrintfA
+#define StringCbVPrintfEx StringCbVPrintfExA
+#define StringCchCat StringCchCatA
+#define StringCchCatEx StringCchCatExA
+#define StringCchCatN StringCchCatNA
+#define StringCchCatNEx StringCchCatNExA
+#define StringCchCatWorker StringCchCatWorkerA
+#define StringCchCopy StringCchCopyA
+#define StringCchCopyEx StringCchCopyExA
+#define StringCchCopyN StringCchCopyNA
+#define StringCchCopyNEx StringCchCopyNExA
+#define StringCchGets StringCchGetsA
+#define StringCchGetsEx StringCchGetsExA
+#define StringCchLength StringCchLengthA
+#define StringCchPrintf StringCchPrintfA
+#define StringCchPrintfEx StringCchPrintfExA
+#define StringCchVPrintf StringCchVPrintfA
+#define StringCchVPrintfEx StringCchVPrintfExA
+#define _vsnprintfAW _vsnprintf
+
+#endif // (STRSAFE_UNICODE != 1)
+#endif // defined(STRSAFE_UNICODE)
+
+/*****************************************************************************/
+
+#if defined (STRSAFE_PASS2)
+
+#if defined(STRSAFE_CB)
+
+#define STRSAFE_CXXtoCB(x) (x)
+#define STRSAFE_CBtoCXX(x) (x)
+#define STRSAFE_CXXtoCCH(x) (x)/sizeof(STRSAFE_TCHAR)
+#define STRSAFE_CCHtoCXX(x) (x)*sizeof(STRSAFE_TCHAR)
+#define StringCxxCat StringCbCat
+#define StringCxxCatEx StringCbCatEx
+#define StringCxxCatN StringCbCatN
+#define StringCxxCatNEx StringCbCatNEx
+#define StringCxxCatWorker StringCbCatWorker
+#define StringCxxCopy StringCbCopy
+#define StringCxxCopyEx StringCbCopyEx
+#define StringCxxCopyN StringCbCopyN
+#define StringCxxCopyNEx StringCbCopyNEx
+#define StringCxxGets StringCbGets
+#define StringCxxGetsEx StringCbGetsEx
+#define StringCxxLength StringCbLength
+#define StringCxxPrintf StringCbPrintf
+#define StringCxxPrintfEx StringCbPrintfEx
+#define StringCxxVPrintf StringCbVPrintf
+#define StringCxxVPrintfEx StringCbVPrintfEx
+
+#else // !STRSAFE_CB
+
+#define STRSAFE_CXXtoCB(x) (x)*sizeof(STRSAFE_TCHAR)
+#define STRSAFE_CBtoCXX(x) (x)/sizeof(STRSAFE_TCHAR)
+#define STRSAFE_CXXtoCCH(x) (x)
+#define STRSAFE_CCHtoCXX(x) (x)
+#define StringCxxCat StringCchCat
+#define StringCxxCatEx StringCchCatEx
+#define StringCxxCatN StringCchCatN
+#define StringCxxCatNEx StringCchCatNEx
+#define StringCxxCatWorker StringCchCatWorker
+#define StringCxxCopy StringCchCopy
+#define StringCxxCopyEx StringCchCopyEx
+#define StringCxxCopyN StringCchCopyN
+#define StringCxxCopyNEx StringCchCopyNEx
+#define StringCxxGets StringCchGets
+#define StringCxxGetsEx StringCchGetsEx
+#define StringCxxLength StringCchLength
+#define StringCxxPrintf StringCchPrintf
+#define StringCxxPrintfEx StringCchPrintfEx
+#define StringCxxVPrintf StringCchVPrintf
+#define StringCxxVPrintfEx StringCchVPrintfEx
+
+#endif // !STRSAFE_CB
+
+#ifdef STRSAFE_LIB
+
+/* Normal function prototypes only */
+#define STRSAFEAPI HRESULT __stdcall
+
+STRSAFEAPI StringCxxCat(STRSAFE_LPTSTR pszDest, size_t cxDest, STRSAFE_LPCTSTR pszSrc);
+STRSAFEAPI StringCxxCatEx(STRSAFE_LPTSTR pszDest, size_t cxDest, STRSAFE_LPCTSTR pszSrc,
STRSAFE_LPTSTR *ppszDestEnd, size_t *pcbRemaining, STRSAFE_DWORD dwFlags);
+STRSAFEAPI StringCxxCatN(STRSAFE_LPTSTR pszDest, size_t cxDest, STRSAFE_LPCTSTR pszSrc,
size_t cbMaxAppend);
+STRSAFEAPI StringCxxCatNEx(STRSAFE_LPTSTR pszDest, size_t cxDest, STRSAFE_LPCTSTR pszSrc,
size_t cbMaxAppend, STRSAFE_LPTSTR *ppszDestEnd, size_t *pcbRemaining, STRSAFE_DWORD
dwFlags);
+STRSAFEAPI StringCxxCopy(STRSAFE_LPTSTR pszDest, size_t cxDest, STRSAFE_LPCTSTR pszSrc);
+STRSAFEAPI StringCxxCopyEx(STRSAFE_LPTSTR pszDest, size_t cxDest, STRSAFE_LPCTSTR pszSrc,
STRSAFE_LPTSTR *ppszDestEnd, size_t *pcbRemaining, STRSAFE_DWORD dwFlags);
+STRSAFEAPI StringCxxCopyN(STRSAFE_LPTSTR pszDest, size_t cxDest, STRSAFE_LPCTSTR pszSrc,
size_t cbSrc);
+STRSAFEAPI StringCxxCopyNEx(STRSAFE_LPTSTR pszDest, size_t cxDest, STRSAFE_LPCTSTR
pszSrc, size_t cbSrc, STRSAFE_LPTSTR *ppszDestEnd, size_t *pcbRemaining, STRSAFE_DWORD
dwFlags);
+STRSAFEAPI StringCxxGets(STRSAFE_LPTSTR pszDest, size_t cxDest);
+STRSAFEAPI StringCxxGetsEx(STRSAFE_LPTSTR pszDest, size_t cxDest, STRSAFE_LPTSTR
*ppszDestEnd, size_t *pcbRemaining, STRSAFE_DWORD dwFlags);
+STRSAFEAPI StringCxxLength(STRSAFE_LPCTSTR psz, size_t cxMax, size_t *pcb);
+STRSAFEAPI StringCxxPrintf(STRSAFE_LPTSTR pszDest, size_t cxDest, STRSAFE_LPCTSTR
pszFormat, ...);
+STRSAFEAPI StringCxxPrintfEx(STRSAFE_LPTSTR pszDest, size_t cxDest, STRSAFE_LPTSTR
*ppszDestEnd, size_t *pcbRemaining, STRSAFE_DWORD dwFlags, STRSAFE_LPCTSTR pszFormat,
...);
+STRSAFEAPI StringCxxVPrintf(STRSAFE_LPTSTR pszDest, size_t cxDest, STRSAFE_LPCTSTR
pszFormat, va_list args);
+STRSAFEAPI StringCxxVPrintfEx(STRSAFE_LPTSTR pszDest, size_t cxDest, STRSAFE_LPTSTR
*ppszDestEnd, size_t *pcbRemaining, STRSAFE_DWORD dwFlags, LPCTSTR pszFormat, va_list
args);
+
+#else // !STRSAFE_LIB
+
+/* Create inlined versions */
+#define STRSAFEAPI HRESULT static __inline__
+
+#define STRSAFE_MAX_CXX STRSAFE_CCHtoCXX(STRSAFE_MAX_CCH)
+
+STRSAFEAPI
+StringCxxCatWorker(
+ STRSAFE_LPTSTR pszDest,
+ size_t cxDest,
+ STRSAFE_LPCTSTR pszSrc,
+ size_t cxMaxAppend,
+ STRSAFE_LPTSTR *ppszDestEnd,
+ size_t *pcbRemaining,
+ STRSAFE_DWORD dwFlags,
+ int UseN)
+{
+ HRESULT result;
+ STRSAFE_LPTSTR psz = pszDest;
+ size_t cch = STRSAFE_CXXtoCCH(cxDest);
+
+ if (!pszDest || !pszSrc || cxDest > STRSAFE_MAX_CXX || cxDest == 0)
+ {
+ return STRSAFE_E_INVALID_PARAMETER;
+ }
+
+ for (--psz; *(++psz) != 0 && --cch > 0;);
+ if (cch == 0)
+ {
+ return STRSAFE_E_INSUFFICIENT_BUFFER;
+ }
+
+ if (UseN)
+ {
+ cch = STRSAFE_MIN(cxDest, STRSAFE_CXXtoCCH(cxMaxAppend));
+ }
+
+ for (--pszSrc, --psz; (*(++psz) = *(++pszSrc)) != 0 && --cch > 0;);
+ if (cch == 0)
+ {
+ result = STRSAFE_E_INSUFFICIENT_BUFFER;
+ }
+ else
+ result = S_OK;
+
+ if (ppszDestEnd)
+ {
+ *ppszDestEnd = psz;
+ }
+
+ if (pcbRemaining)
+ {
+ *pcbRemaining = STRSAFE_CCHtoCXX(cch);
+ }
+
+ if (dwFlags & STRSAFE_FILL_BEHIND_NULL)
+ {
+ for (--psz, ++cch; --cch; *(++psz) = dwFlags & 0xff);
+ }
+
+ if (!SUCCEEDED(result))
+ {
+ if (dwFlags & STRSAFE_FILL_ON_FAILURE)
+ {
+ cch = STRSAFE_CXXtoCCH(cxDest);
+ for (--pszDest, ++cch; --cch; *(++pszDest) = dwFlags & 0xff);
+ }
+
+ if (dwFlags & STRSAFE_NULL_ON_FAILURE)
+ {
+ *pszDest = 0;
+ }
+ }
+
+ return result;
+}
+
+STRSAFEAPI
+StringCxxCatEx(
+ STRSAFE_LPTSTR pszDest,
+ size_t cxDest,
+ STRSAFE_LPCTSTR pszSrc,
+ STRSAFE_LPTSTR *ppszDestEnd,
+ size_t *pcbRemaining,
+ STRSAFE_DWORD dwFlags)
+{
+ return StringCxxCatWorker(pszDest, cxDest, pszSrc, 0, ppszDestEnd, pcbRemaining,
dwFlags, 0);
+}
+
+STRSAFEAPI
+StringCxxCat(
+ STRSAFE_LPTSTR pszDest,
+ size_t cxDest,
+ STRSAFE_LPCTSTR pszSrc)
+{
+ return StringCxxCatWorker(pszDest, cxDest, pszSrc, 0, NULL, NULL, 0, 0);
+}
+
+STRSAFEAPI
+StringCxxCatN(
+ STRSAFE_LPTSTR pszDest,
+ size_t cxDest,
+ STRSAFE_LPCTSTR pszSrc,
+ size_t cbMaxAppend)
+{
+ return StringCxxCatWorker(pszDest, cxDest, pszSrc, cbMaxAppend, NULL, NULL, 0, 1);
+}
+
+STRSAFEAPI
+StringCxxCatNEx(
+ STRSAFE_LPTSTR pszDest,
+ size_t cxDest,
+ STRSAFE_LPCTSTR pszSrc,
+ size_t cbMaxAppend,
+ STRSAFE_LPTSTR *ppszDestEnd,
+ size_t *pcbRemaining,
+ STRSAFE_DWORD dwFlags)
+{
+ return StringCxxCatWorker(pszDest, cxDest, pszSrc, cbMaxAppend, ppszDestEnd,
pcbRemaining, dwFlags, 1);
+}
+
+STRSAFEAPI
+StringCxxCopy(
+ STRSAFE_LPTSTR pszDest,
+ size_t cbDest,
+ STRSAFE_LPCTSTR pszSrc)
+{
+ return 0; // FIXME
+}
+
+STRSAFEAPI
+StringCxxCopyEx(
+ STRSAFE_LPTSTR pszDest,
+ size_t cbDest,
+ STRSAFE_LPCTSTR pszSrc,
+ STRSAFE_LPTSTR *ppszDestEnd,
+ size_t *pcbRemaining,
+ STRSAFE_DWORD dwFlags)
+{
+ return 0; // FIXME
+}
+
+STRSAFEAPI
+StringCxxCopyN(
+ STRSAFE_LPTSTR pszDest,
+ size_t cbDest,
+ STRSAFE_LPCTSTR pszSrc,
+ size_t cbSrc)
+{
+ return 0; // FIXME
+}
+
+STRSAFEAPI
+StringCxxCopyNEx(
+ STRSAFE_LPTSTR pszDest,
+ size_t cbDest,
+ STRSAFE_LPCTSTR pszSrc,
+ size_t cbSrc,
+ STRSAFE_LPTSTR *ppszDestEnd,
+ size_t *pcbRemaining,
+ STRSAFE_DWORD dwFlags)
+{
+ return 0; // FIXME
+}
+
+STRSAFEAPI
+StringCxxGets(
+ STRSAFE_LPTSTR pszDest,
+ size_t cbDest)
+{
+ return 0; // FIXME
+}
+
+STRSAFEAPI
+StringCxxGetsEx(
+ STRSAFE_LPTSTR pszDest,
+ size_t cbDest,
+ STRSAFE_LPTSTR *ppszDestEnd,
+ size_t *pcbRemaining,
+ STRSAFE_DWORD dwFlags)
+{
+ return 0; // FIXME
+}
+
+STRSAFEAPI
+StringCxxLength(
+ STRSAFE_LPCTSTR psz,
+ size_t cxMax,
+ size_t *pcx)
+{
+ size_t cch = STRSAFE_CXXtoCCH(cxMax);
+
+ /* Default return on error */
+ if (pcx)
+ *pcx = 0;
+
+ if (!psz || cxMax > STRSAFE_MAX_CXX || cxMax == 0)
+ {
+ return STRSAFE_E_INVALID_PARAMETER;
+ }
+
+ for (--psz; *(++psz) != 0 && --cch > 0;);
+
+ if (cch == 0)
+ {
+ return STRSAFE_E_INVALID_PARAMETER;
+ }
+
+ if (pcx)
+ *pcx = cxMax - STRSAFE_CCHtoCXX(cch);
+
+ return S_OK;
+}
+
+STRSAFEAPI
+StringCxxVPrintfEx(
+ STRSAFE_LPTSTR pszDest,
+ size_t cxDest,
+ STRSAFE_LPTSTR *ppszDestEnd,
+ size_t *pcxRemaining,
+ STRSAFE_DWORD dwFlags,
+ STRSAFE_LPCTSTR pszFormat,
+ va_list args)
+{
+ size_t cchDest = STRSAFE_CXXtoCCH(cxDest);
+ size_t cchMax = cchDest - 1;
+ int iResult;
+ HRESULT hr;
+
+ if (dwFlags & STRSAFE_IGNORE_NULLS)
+ {
+ if (!pszDest) pszDest = (STRSAFE_LPTSTR)L"";
+ if (!pszFormat) pszFormat = (STRSAFE_LPTSTR)L"";
+ }
+
+ if (!pszDest || !pszFormat || cxDest > STRSAFE_MAX_CXX || cxDest == 0)
+ {
+ return STRSAFE_E_INVALID_PARAMETER;
+ }
+
+#if (STRSAFE_USE_SECURE_CRT == 1)
+ iResult = _vsnprintf_sAW(pszDest, cchDest, cchMax, pszFormat, args);
+#else
+ iResult = _vsnprintfAW(pszDest, cchMax, pszFormat, args);
+#endif
+
+ hr = (iResult == -1) ? STRSAFE_E_INSUFFICIENT_BUFFER : S_OK;
+
+ if ((size_t)iResult >= cchMax)
+ {
+ pszDest[cchMax] = 0;
+ iResult = cchMax;
+ }
+
+ if (ppszDestEnd) *ppszDestEnd = pszDest + iResult;
+
+ if (pcxRemaining) *pcxRemaining = STRSAFE_CCHtoCXX(cchMax - iResult);
+
+ if (SUCCEEDED(hr))
+ {
+ if ((dwFlags & STRSAFE_FILL_BEHIND_NULL) && (iResult + 1 <
cchMax))
+ {
+ memset(pszDest + iResult + 1,
+ dwFlags & 0xff,
+ (cchMax - iResult - 1) * sizeof(STRSAFE_TCHAR));
+ }
+ }
+ else
+ {
+ if (dwFlags & STRSAFE_FILL_ON_FAILURE)
+ {
+ memset(pszDest, dwFlags & 0xff, cchMax * sizeof(STRSAFE_TCHAR));
+ }
+ else if (dwFlags & STRSAFE_NULL_ON_FAILURE)
+ {
+ *pszDest = 0;
+ }
+ }
+
+ return hr;
+}
+
+STRSAFEAPI
+StringCxxVPrintf(
+ STRSAFE_LPTSTR pszDest,
+ size_t cxDest,
+ STRSAFE_LPCTSTR pszFormat,
+ va_list args)
+{
+ return StringCxxVPrintfEx(pszDest, cxDest, NULL, NULL, 0, pszFormat, args);
+}
+
+STRSAFEAPI
+StringCxxPrintf(
+ STRSAFE_LPTSTR pszDest,
+ size_t cxDest,
+ STRSAFE_LPCTSTR pszFormat, ...)
+{
+ HRESULT result;
+ va_list args;
+ va_start(args, pszFormat);
+ result = StringCxxVPrintf(pszDest, cxDest, pszFormat, args);
+ va_end(args);
+ return result;
+}
+
+STRSAFEAPI
+StringCxxPrintfEx(
+ STRSAFE_LPTSTR pszDest,
+ size_t cxDest,
+ STRSAFE_LPTSTR *ppszDestEnd,
+ size_t *pcbRemaining,
+ STRSAFE_DWORD dwFlags,
+ STRSAFE_LPCTSTR pszFormat, ...)
+{
+ HRESULT result;
+ va_list args;
+ va_start(args, pszFormat);
+ result = StringCxxVPrintfEx(pszDest, cxDest, ppszDestEnd, pcbRemaining, dwFlags,
pszFormat, args);
+ va_end(args);
+ return result;
+}
+
+#endif // !STRSAFE_LIB
+
+/* Functions are implemented or defined, clear #defines for next pass */
+#undef StringCxxCat
+#undef StringCxxCatEx
+#undef StringCxxCatN
+#undef StringCxxCatNEx
+#undef StringCxxCatWorker
+#undef StringCxxCopy
+#undef StringCxxCopyEx
+#undef StringCxxCopyN
+#undef StringCxxCopyNEx
+#undef StringCxxGets
+#undef StringCxxGetsEx
+#undef StringCxxLength
+#undef StringCxxPrintf
+#undef StringCxxPrintfEx
+#undef StringCxxVPrintf
+#undef StringCxxVPrintfEx
+
+#undef StringCbCat
+#undef StringCbCatEx
+#undef StringCbCatN
+#undef StringCbCatNEx
+#undef StringCbCatWorker
+#undef StringCbCopy
+#undef StringCbCopyEx
+#undef StringCbCopyN
+#undef StringCbCopyNEx
+#undef StringCbGets
+#undef StringCbGetsEx
+#undef StringCbLength
+#undef StringCbPrintf
+#undef StringCbPrintfEx
+#undef StringCbVPrintf
+#undef StringCbVPrintfEx
+#undef StringCchCat
+#undef StringCchCatEx
+#undef StringCchCatN
+#undef StringCchCatNEx
+#undef StringCchCatWorker
+#undef StringCchCopy
+#undef StringCchCopyEx
+#undef StringCchCopyN
+#undef StringCchCopyNEx
+#undef StringCchGets
+#undef StringCchGetsEx
+#undef StringCchLength
+#undef StringCchPrintf
+#undef StringCchPrintfEx
+#undef StringCchVPrintf
+#undef StringCchVPrintfEx
+#undef _vsnprintfAW
+
+#undef STRSAFE_LPTSTR
+#undef STRSAFE_LPCTSTR
+#undef STRSAFE_TCHAR
+
+#undef STRSAFE_CXXtoCB
+#undef STRSAFE_CBtoCXX
+#undef STRSAFE_CXXtoCCH
+#undef STRSAFE_CCHtoCXX
+
+#endif // defined (STRSAFE_PASS2)
+
Propchange: trunk/reactos/include/psdk/strsafe.h
------------------------------------------------------------------------------
svn:eol-style = native