Remove the strsafe library, it was imported from a dubious source, which is incompati...
authorColin Finck <colin@reactos.org>
Fri, 4 Jul 2008 08:24:37 +0000 (08:24 +0000)
committerColin Finck <colin@reactos.org>
Fri, 4 Jul 2008 08:24:37 +0000 (08:24 +0000)
svn path=/trunk/; revision=34290

reactos/include/psdk/strsafe.h [deleted file]
reactos/lib/sdk/sdk.rbuild
reactos/lib/sdk/strsafe/strsafe.c [deleted file]
reactos/lib/sdk/strsafe/strsafe.rbuild [deleted file]

diff --git a/reactos/include/psdk/strsafe.h b/reactos/include/psdk/strsafe.h
deleted file mode 100644 (file)
index 4011f06..0000000
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
- * STRSAFE
- *
- * Copyright 2007 Dmitry Chapyshev <dmitry@reactos.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-#ifndef _STRSAFE_H_INCLUDED_
-#define _STRSAFE_H_INCLUDED_
-
-#ifdef __cplusplus
-#define _STRSAFE_EXTERN_C    extern "C"
-extern "C" {
-#else
-#define _STRSAFE_EXTERN_C    extern
-#endif
-
-#include <string.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <windows.h>
-
-#define STRSAFE_INLINE_API  __inline HRESULT __stdcall
-#define STRSAFEAPI          _STRSAFE_EXTERN_C HRESULT __stdcall
-
-#ifndef _NTSTRSAFE_H_INCLUDED_
-
-#define STRSAFE_MAX_CCH                             2147483647
-
-#define STRSAFE_FILL_BEHIND_NULL                    0x00000200
-#define STRSAFE_IGNORE_NULLS                        0x00000100
-#define STRSAFE_FILL_ON_FAILURE                     0x00000400
-#define STRSAFE_NULL_ON_FAILURE                     0x00000800
-#define STRSAFE_NO_TRUNCATION                       0x00001000
-#define STRSAFE_IGNORE_NULL_UNICODE_STRINGS         0x00010000
-#define STRSAFE_UNICODE_STRING_DEST_NULL_TERMINATED 0x00020000
-
-#define STRSAFE_VALID_FLAGS                (0x000000FF | STRSAFE_IGNORE_NULLS | STRSAFE_FILL_BEHIND_NULL | STRSAFE_FILL_ON_FAILURE | STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION)
-#define STRSAFE_UNICODE_STRING_VALID_FLAGS (STRSAFE_VALID_FLAGS | STRSAFE_IGNORE_NULL_UNICODE_STRINGS | STRSAFE_UNICODE_STRING_DEST_NULL_TERMINATED)
-#define STRSAFE_FILL_BYTE(x)               ((unsigned long)((x & 0x000000FF) | STRSAFE_FILL_BEHIND_NULL))
-#define STRSAFE_FAILURE_BYTE(x)            ((unsigned long)((x & 0x000000FF) | STRSAFE_FILL_ON_FAILURE))
-#define STRSAFE_GET_FILL_PATTERN(dwFlags)  ((int)(dwFlags & 0x000000FF))
-
-#endif /* _NTSTRSAFE_H_INCLUDED_ */
-
-#define STRSAFE_E_INSUFFICIENT_BUFFER      ((HRESULT)0x8007007AL)
-#define STRSAFE_E_INVALID_PARAMETER        ((HRESULT)0x80070057L)
-#define STRSAFE_E_END_OF_FILE              ((HRESULT)0x80070026L)
-
-#ifndef STRSAFE_NO_CCH_FUNCTIONS
-STRSAFEAPI
-StringCchCatA(LPTSTR pszDest,
-              size_t cchDest,
-              LPCTSTR pszSrc);
-
-STRSAFEAPI
-StringCchCatW(LPWSTR pszDest,
-              size_t cchDest,
-              LPCWSTR pszSrc);
-
-STRSAFEAPI
-StringCchCatExA(LPTSTR pszDest,
-                size_t cchDest,
-                LPCTSTR pszSrc,
-                LPTSTR *ppszDestEnd,
-                size_t* pcchRemaining,
-                unsigned long dwFlags);
-
-STRSAFEAPI
-StringCchCatExW(LPWSTR pszDest,
-                size_t cchDest,
-                LPCWSTR pszSrc,
-                LPWSTR *ppszDestEnd,
-                size_t* pcchRemaining,
-                unsigned long dwFlags);
-
-STRSAFEAPI
-StringCchCatNA(LPTSTR pszDest,
-               size_t cchDest,
-               LPCTSTR pszSrc,
-               size_t cchMaxAppend);
-
-STRSAFEAPI
-StringCchCatNW(LPWSTR pszDest,
-               size_t cchDest,
-               LPCWSTR pszSrc,
-               size_t cchMaxAppend);
-
-STRSAFEAPI
-StringCchCatNExA(LPTSTR pszDest,
-                 size_t cchDest,
-                 LPCTSTR pszSrc,
-                 size_t cchMaxAppend,
-                 LPTSTR *ppszDestEnd,
-                 size_t* pcchRemaining,
-                 unsigned long dwFlags);
-
-STRSAFEAPI
-StringCchCatNExW(LPWSTR pszDest,
-                 size_t cchDest,
-                 LPCWSTR pszSrc,
-                 size_t cchMaxAppend,
-                 LPWSTR *ppszDestEnd,
-                 size_t* pcchRemaining,
-                 unsigned long dwFlags);
-
-STRSAFEAPI
-StringCchCopyA(LPTSTR pszDest,
-               size_t cchDest,
-               LPCTSTR pszSrc);
-
-STRSAFEAPI
-StringCchCopyW(LPWSTR pszDest,
-               size_t cchDest,
-               LPCWSTR pszSrc);
-
-STRSAFEAPI
-StringCchCopyExA(LPTSTR pszDest,
-                 size_t cchDest,
-                 LPCTSTR pszSrc,
-                 LPTSTR *ppszDestEnd,
-                 size_t* pcchRemaining,
-                 unsigned long dwFlags);
-
-STRSAFEAPI
-StringCchCopyExW(LPWSTR pszDest,
-                 size_t cchDest,
-                 LPCWSTR pszSrc,
-                 LPWSTR *ppszDestEnd,
-                 size_t* pcchRemaining,
-                 unsigned long dwFlags);
-
-STRSAFEAPI
-StringCchCopyNA(LPTSTR pszDest,
-                size_t cchDest,
-                LPCTSTR pszSrc,
-                size_t cchSrc);
-
-STRSAFEAPI
-StringCchCopyNW(LPWSTR pszDest,
-                size_t cchDest,
-                LPCWSTR pszSrc,
-                size_t cchSrc);
-
-STRSAFEAPI
-StringCchCopyNExA(LPTSTR pszDest,
-                  size_t cchDest,
-                  LPCTSTR pszSrc,
-                  size_t cchSrc,
-                  LPTSTR *ppszDestEnd,
-                  size_t* pcchRemaining,
-                  unsigned long dwFlags);
-
-STRSAFEAPI
-StringCchCopyNExW(LPWSTR pszDest,
-                  size_t cchDest,
-                  LPCWSTR pszSrc,
-                  size_t cchSrc,
-                  LPWSTR *ppszDestEnd,
-                  size_t* pcchRemaining,
-                  unsigned long dwFlags);
-
-STRSAFE_INLINE_API
-StringCchGetsA(LPTSTR pszDest,
-               size_t cchDest);
-
-STRSAFE_INLINE_API
-StringCchGetsW(LPWSTR pszDest,
-               size_t cchDest);
-
-STRSAFE_INLINE_API
-StringCchGetsExA(LPTSTR pszDest,
-                 size_t cchDest,
-                 LPTSTR *ppszDestEnd,
-                 size_t* pcchRemaining,
-                 unsigned long dwFlags);
-
-STRSAFE_INLINE_API
-StringCchGetsExW(LPWSTR pszDest,
-                 size_t cchDest,
-                 LPWSTR *ppszDestEnd,
-                 size_t* pcchRemaining,
-                 unsigned long dwFlags);
-
-STRSAFEAPI
-StringCchVPrintfA(LPTSTR pszDest,
-                  size_t cchDest,
-                  LPCTSTR pszFormat,
-                  va_list argList);
-
-STRSAFEAPI
-StringCchVPrintfW(LPWSTR pszDest,
-                  size_t cchDest,
-                  LPCWSTR pszFormat,
-                  va_list argList);
-
-STRSAFEAPI
-StringCchVPrintfExA(LPTSTR pszDest,
-                    size_t cchDest,
-                    LPTSTR *ppszDestEnd,
-                    size_t* pcchRemaining,
-                    unsigned long dwFlags,
-                    LPCTSTR pszFormat,
-                    va_list argList);
-
-STRSAFEAPI
-StringCchVPrintfExW(LPWSTR pszDest,
-                    size_t cchDest,
-                    LPWSTR *ppszDestEnd,
-                    size_t* pcchRemaining,
-                    unsigned long dwFlags,
-                    LPCWSTR pszFormat,
-                    va_list argList);
-
-STRSAFEAPI
-StringCchLengthA(LPCTSTR psz,
-                 size_t cchMax,
-                 size_t* pcch);
-
-STRSAFEAPI
-StringCchLengthW(LPCWSTR psz,
-                 size_t cchMax,
-                 size_t* pcch);
-#endif /* STRSAFE_NO_CCH_FUNCTIONS */
-
-/* CB */
-#ifndef STRSAFE_NO_CB_FUNCTIONS
-STRSAFEAPI
-StringCbCatA(LPTSTR pszDest,
-             size_t cbDest,
-             LPCTSTR pszSrc);
-
-STRSAFEAPI
-StringCbCatW(LPWSTR pszDest,
-             size_t cbDest,
-             LPCWSTR pszSrc);
-
-STRSAFEAPI
-StringCbCatExA(LPTSTR pszDest,
-               size_t cbDest,
-               LPCTSTR pszSrc,
-               LPTSTR *ppszDestEnd,
-               size_t* pcbRemaining,
-               unsigned long dwFlags);
-
-STRSAFEAPI
-StringCbCatExW(LPWSTR pszDest,
-               size_t cbDest,
-               LPCWSTR pszSrc,
-               LPWSTR *ppszDestEnd,
-               size_t* pcbRemaining,
-               unsigned long dwFlags);
-
-STRSAFEAPI
-StringCbCopyA(LPTSTR pszDest,
-              size_t cbDest,
-              LPCTSTR pszSrc);
-
-STRSAFEAPI
-StringCbCopyW(LPWSTR pszDest,
-              size_t cbDest,
-              LPCWSTR pszSrc);
-
-STRSAFEAPI
-StringCbCopyExA(LPTSTR pszDest,
-                size_t cbDest,
-                LPCTSTR pszSrc,
-                LPTSTR *ppszDestEnd,
-                size_t* pcbRemaining,
-                unsigned long dwFlags);
-
-STRSAFEAPI
-StringCbCopyExW(LPWSTR pszDest,
-                size_t cbDest,
-                LPCWSTR pszSrc,
-                LPWSTR *ppszDestEnd,
-                size_t* pcbRemaining,
-                unsigned long dwFlags);
-
-STRSAFEAPI
-StringCbCopyNA(LPTSTR pszDest,
-               size_t cbDest,
-               LPCTSTR pszSrc,
-               size_t cbSrc);
-
-STRSAFEAPI
-StringCbCopyNW(LPWSTR pszDest,
-               size_t cbDest,
-               LPCWSTR pszSrc,
-               size_t cbSrc);
-
-STRSAFEAPI
-StringCbCopyNExA(LPTSTR pszDest,
-                 size_t cbDest,
-                 LPCTSTR pszSrc,
-                 size_t cbSrc,
-                 LPTSTR *ppszDestEnd,
-                 size_t* pcbRemaining,
-                 unsigned long dwFlags);
-
-STRSAFEAPI
-StringCbCopyNExW(LPWSTR pszDest,
-                 size_t cbDest,
-                 LPCWSTR pszSrc,
-                 size_t cbSrc,
-                 LPWSTR *ppszDestEnd,
-                 size_t* pcbRemaining,
-                 unsigned long dwFlags);
-
-STRSAFE_INLINE_API
-StringCbGetsA(LPTSTR pszDest,
-              size_t cbDest);
-
-STRSAFE_INLINE_API
-StringCbGetsW(LPWSTR pszDest,
-              size_t cbDest);
-
-STRSAFE_INLINE_API
-StringCbGetsExA(LPTSTR pszDest,
-                size_t cbDest,
-                LPTSTR *ppszDestEnd,
-                size_t* pbRemaining,
-                unsigned long dwFlags);
-
-STRSAFE_INLINE_API
-StringCbGetsExW(LPWSTR pszDest,
-                size_t cbDest,
-                LPWSTR *ppszDestEnd,
-                size_t* pcbRemaining,
-                unsigned long dwFlags);
-
-STRSAFEAPI
-StringCbPrintfA(LPTSTR pszDest,
-                size_t cbDest,
-                LPCTSTR pszFormat,
-                ...);
-
-STRSAFEAPI
-StringCbPrintfW(LPWSTR pszDest,
-                size_t cbDest,
-                LPCWSTR pszFormat,
-                ...);
-
-STRSAFEAPI
-StringCbPrintfExA(LPTSTR pszDest,
-                  size_t cbDest,
-                  LPTSTR *ppszDestEnd,
-                  size_t* pcbRemaining,
-                  unsigned long dwFlags,
-                  LPCTSTR pszFormat,
-                  ...);
-
-STRSAFEAPI
-StringCbPrintfExW(LPWSTR pszDest,
-                  size_t cbDest,
-                  LPWSTR *ppszDestEnd,
-                  size_t* pcbRemaining,
-                  unsigned long dwFlags,
-                  LPCWSTR pszFormat,
-                  ...);
-#endif /* STRSAFE_NO_CB_FUNCTIONS */
-
-#ifdef UNICODE
-#ifndef STRSAFE_NO_CCH_FUNCTIONS
-#define StringCchCat       StringCchCatW
-#define StringCchCatEx     StringCchCatExW
-#define StringCchCatN      StringCchCatNW
-#define StringCchCatNEx    StringCchCatNExW
-#define StringCchCopy      StringCchCopyW
-#define StringCchCopyEx    StringCchCopyExW
-#define StringCchCopyN     StringCchCopyNW
-#define StringCchCopyNEx   StringCchCopyNExW
-#define StringCchGets      StringCchGetsW
-#define StringCchGetsEx    StringCchGetsExW
-#define StringCchPrintf    StringCchPrintfW
-#define StringCchPrintfEx  StringCchPrintfExW
-#define StringCchVPrintf   StringCchVPrintfW
-#define StringCchVPrintfEx StringCchVPrintfExW
-#define StringCchLength    StringCchLengthW
-#endif /* STRSAFE_NO_CCH_FUNCTIONS */
-
-#ifndef STRSAFE_NO_CB_FUNCTIONS
-#define StringCbCat        StringCbCatW
-#define StringCbCatEx      StringCbCatExW
-#define StringCbCatN       StringCbCatNW
-#define StringCbCatNEx     StringCbCatNExW
-#define StringCbCopy       StringCbCopyW
-#define StringCbCopyEx     StringCbCopyExW
-#define StringCbCopyN      StringCbCopyNW
-#define StringCbCopyNEx    StringCbCopyNExW
-#define StringCbGets       StringCbGetsW
-#define StringCbGetsEx     StringCbGetsExW
-#define StringCbPrintf     StringCbPrintfW
-#define StringCbPrintfEx   StringCbPrintfExW
-#define StringCbVPrintf    StringCbVPrintfW
-#define StringCbVPrintfEx  StringCbVPrintfExW
-#define StringCbLenght     StringCbLenghtW
-#endif /* STRSAFE_NO_CB_FUNCTIONS */
-
-#else
-#ifndef STRSAFE_NO_CCH_FUNCTIONS
-#define StringCchCat       StringCchCatA
-#define StringCchCatEx     StringCchCatExA
-#define StringCchCatN      StringCchCatNA
-#define StringCchCatNEx    StringCchCatNExA
-#define StringCchCopy      StringCchCopyA
-#define StringCchCopyEx    StringCchCopyExA
-#define StringCchCopyN     StringCchCopyNA
-#define StringCchCopyNEx   StringCchCopyNExA
-#define StringCchGets      StringCchGetsA
-#define StringCchGetsEx    StringCchGetsExA
-#define StringCchPrintf    StringCchPrintfA
-#define StringCchPrintfEx  StringCchPrintfExA
-#define StringCchVPrintf   StringCchVPrintfA
-#define StringCchVPrintfEx StringCchVPrintfExA
-#define StringCchLength    StringCchLengthA
-#endif /* STRSAFE_NO_CCH_FUNCTIONS */
-
-#ifndef STRSAFE_NO_CB_FUNCTIONS
-#define StringCbCat        StringCbCatA
-#define StringCbCatEx      StringCbCatExA
-#define StringCbCatN       StringCbCatNA
-#define StringCbCatNEx     StringCbCatNExA
-#define StringCbCopy       StringCbCopyA
-#define StringCbCopyEx     StringCbCopyExA
-#define StringCbCopyN      StringCbCopyNA
-#define StringCbCopyNEx    StringCbCopyNExA
-#define StringCbGets       StringCbGetsA
-#define StringCbGetsEx     StringCbGetsExA
-#define StringCbPrintf     StringCbPrintfA
-#define StringCbPrintfEx   StringCbPrintfExA
-#define StringCbVPrintf    StringCbVPrintfA
-#define StringCbVPrintfEx  StringCbVPrintfExA
-#define StringCbLenght     StringCbLenghtA
-#endif /* STRSAFE_NO_CB_FUNCTIONS */
-#endif /* UNICODE */
-
-#ifdef __cplusplus
-}
-#endif /* cplusplus */
-
-#endif /* _STRSAFE_H_INCLUDED_ */
index 7597d08..671e009 100644 (file)
@@ -23,7 +23,4 @@
        <directory name="scrnsave">\r
                <xi:include href="scrnsave/scrnsave.rbuild" />\r
        </directory>\r
        <directory name="scrnsave">\r
                <xi:include href="scrnsave/scrnsave.rbuild" />\r
        </directory>\r
-       <directory name="strsafe">\r
-               <xi:include href="strsafe/strsafe.rbuild" />\r
-       </directory>\r
 </group>\r
 </group>\r
diff --git a/reactos/lib/sdk/strsafe/strsafe.c b/reactos/lib/sdk/strsafe/strsafe.c
deleted file mode 100644 (file)
index 4b0d961..0000000
+++ /dev/null
@@ -1,2834 +0,0 @@
-/*
- * STRSAFE.LIB
- *
- * Copyright 2007 Dmitry Chapyshev <dmitry@reactos.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <windows.h>
-#include <strsafe.h>
-
-HRESULT
-StringCopyWorkerA(LPTSTR pszDest,
-                  size_t cchDest,
-                  LPCTSTR pszSrc);
-HRESULT
-StringCopyWorkerW(LPWSTR  pszDest,
-                  size_t cchDest,
-                  LPCWSTR pszSrc);
-HRESULT
-StringCopyExWorkerA(LPTSTR pszDest,
-                    size_t cchDest,
-                    size_t cbDest,
-                    LPCTSTR pszSrc,
-                    LPTSTR *ppszDestEnd,
-                    size_t *pcchRemaining,
-                    unsigned long dwFlags);
-HRESULT
-StringCopyExWorkerW(LPWSTR  pszDest,
-                    size_t cchDest,
-                    size_t cbDest,
-                    LPCWSTR pszSrc,
-                    LPWSTR *ppszDestEnd,
-                    size_t *pcchRemaining,
-                    unsigned long dwFlags);
-HRESULT
-StringCopyNWorkerA(LPTSTR pszDest,
-                   size_t cchDest,
-                   LPCTSTR pszSrc,
-                   size_t cchSrc);
-HRESULT
-StringCopyNWorkerW(LPWSTR  pszDest,
-                   size_t cchDest,
-                   LPCWSTR pszSrc,
-                   size_t cchSrc);
-HRESULT
-StringCopyNExWorkerA(LPTSTR pszDest,
-                     size_t cchDest,
-                     size_t cbDest,
-                     LPCTSTR pszSrc,
-                     size_t cchSrc,
-                     LPTSTR *ppszDestEnd,
-                     size_t *pcchRemaining,
-                     unsigned long dwFlags);
-HRESULT
-StringCopyNExWorkerW(LPWSTR  pszDest,
-                     size_t cchDest,
-                     size_t cbDest,
-                     LPCWSTR pszSrc,
-                     size_t cchSrc,
-                     LPWSTR *ppszDestEnd,
-                     size_t *pcchRemaining,
-                     unsigned long dwFlags);
-HRESULT
-StringCatWorkerA(LPTSTR pszDest,
-                 size_t cchDest,
-                 LPCTSTR pszSrc);
-HRESULT
-StringCatWorkerW(LPWSTR  pszDest,
-                 size_t cchDest,
-                 LPCWSTR pszSrc);
-HRESULT
-StringCatExWorkerA(LPTSTR pszDest,
-                   size_t cchDest,
-                   size_t cbDest,
-                   LPCTSTR pszSrc,
-                   LPTSTR *ppszDestEnd,
-                   size_t *pcchRemaining,
-                   unsigned long dwFlags);
-HRESULT
-StringCatExWorkerW(LPWSTR  pszDest,
-                   size_t cchDest,
-                   size_t cbDest,
-                   LPCWSTR pszSrc,
-                   LPWSTR *ppszDestEnd,
-                   size_t *pcchRemaining,
-                   unsigned long dwFlags);
-HRESULT
-StringCatNWorkerA(LPTSTR pszDest,
-                  size_t cchDest,
-                  LPCTSTR pszSrc,
-                  size_t cchMaxAppend);
-HRESULT
-StringCatNWorkerW(LPWSTR  pszDest,
-                  size_t cchDest,
-                  LPCWSTR pszSrc,
-                  size_t cchMaxAppend);
-HRESULT
-StringCatNExWorkerA(LPTSTR pszDest,
-                    size_t cchDest,
-                    size_t cbDest,
-                    LPCTSTR pszSrc,
-                    size_t cchMaxAppend,
-                    LPTSTR *ppszDestEnd,
-                    size_t *pcchRemaining,
-                    unsigned long dwFlags);
-HRESULT
-StringCatNExWorkerW(LPWSTR  pszDest,
-                    size_t cchDest,
-                    size_t cbDest,
-                    LPCWSTR pszSrc,
-                    size_t cchMaxAppend,
-                    LPWSTR *ppszDestEnd,
-                    size_t *pcchRemaining,
-                    unsigned long dwFlags);
-HRESULT
-StringVPrintfWorkerA(LPTSTR pszDest,
-                     size_t cchDest,
-                     LPCTSTR pszFormat,
-                     va_list argList);
-HRESULT
-StringVPrintfWorkerW(LPWSTR  pszDest,
-                     size_t cchDest,
-                     LPCWSTR pszFormat,
-                     va_list argList);
-HRESULT
-StringVPrintfExWorkerA(LPTSTR pszDest,
-                       size_t cchDest,
-                       size_t cbDest,
-                       LPTSTR *ppszDestEnd,
-                       size_t *pcchRemaining,
-                       unsigned long dwFlags,
-                       LPCTSTR pszFormat,
-                       va_list argList);
-HRESULT
-StringVPrintfExWorkerW(LPWSTR  pszDest,
-                       size_t cchDest,
-                       size_t cbDest,
-                       LPWSTR *ppszDestEnd,
-                       size_t *pcchRemaining,
-                       unsigned long dwFlags,
-                       LPCWSTR pszFormat,
-                       va_list argList);
-HRESULT
-StringLengthWorkerA(LPCTSTR psz,
-                    size_t cchMax,
-                    size_t *pcch);
-HRESULT
-StringLengthWorkerW(LPCWSTR psz,
-                    size_t cchMax,
-                    size_t *pcch);
-
-/**************************************************************************/
-// Worker's functions
-/**************************************************************************/
-HRESULT
-StringCopyWorkerA(LPTSTR pszDest,
-                  size_t cchDest,
-                  LPCTSTR pszSrc)
-{
-    HRESULT hr = S_OK;
-
-    if (cchDest == 0) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        while (cchDest && (*pszSrc != '\0'))
-        {
-            *pszDest++ = *pszSrc++;
-            cchDest--;
-        }
-        if (cchDest == 0)
-        {
-            pszDest--;
-            hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-        }
-        *pszDest= '\0';
-    }
-    return hr;
-}
-
-HRESULT
-StringCopyWorkerW(LPWSTR  pszDest,
-                  size_t cchDest,
-                  LPCWSTR pszSrc)
-{
-    HRESULT hr = S_OK;
-
-    if (cchDest == 0) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        while (cchDest && (*pszSrc != L'\0'))
-        {
-            *pszDest++ = *pszSrc++;
-            cchDest--;
-        }
-        if (cchDest == 0)
-        {
-            pszDest--;
-            hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-        }
-        *pszDest= L'\0';
-    }
-    return hr;
-}
-
-HRESULT
-StringCopyExWorkerA(LPTSTR pszDest,
-                    size_t cchDest,
-                    size_t cbDest,
-                    LPCTSTR pszSrc,
-                    LPTSTR *ppszDestEnd,
-                    size_t* pcchRemaining,
-                    unsigned long dwFlags)
-{
-    HRESULT hr = S_OK;
-    LPTSTR pszDestEnd = pszDest;
-    size_t cchRemaining = 0;
-
-    if (dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        if (dwFlags & STRSAFE_IGNORE_NULLS)
-        {
-            if (pszDest == NULL)
-            {
-                if ((cchDest != 0) || (cbDest != 0))
-                    hr = STRSAFE_E_INVALID_PARAMETER;
-            }
-            if (pszSrc == NULL) pszSrc = "";
-        }
-        if (SUCCEEDED(hr))
-        {
-            if (cchDest == 0)
-            {
-                pszDestEnd = pszDest;
-                cchRemaining = 0;
-                if (*pszSrc != '\0')
-                {
-                    if (pszDest == NULL)
-                        hr = STRSAFE_E_INVALID_PARAMETER;
-                    else
-                        hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-            }
-            else
-            {
-                pszDestEnd = pszDest;
-                cchRemaining = cchDest;
-
-                while (cchRemaining && (*pszSrc != '\0'))
-                {
-                    *pszDestEnd++= *pszSrc++;
-                    cchRemaining--;
-                }
-
-                if (cchRemaining > 0)
-                {
-                    if (dwFlags & STRSAFE_FILL_BEHIND_NULL)
-                        memset(pszDestEnd + 1, STRSAFE_GET_FILL_PATTERN(dwFlags), ((cchRemaining - 1) * sizeof(char)) + (cbDest % sizeof(char)));
-                }
-                else
-                {
-                    pszDestEnd--;
-                    cchRemaining++;
-                    hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-                *pszDestEnd = '\0';
-            }
-        }
-    }
-    if (FAILED(hr))
-    {
-        if (pszDest)
-        {
-            if (dwFlags & STRSAFE_FILL_ON_FAILURE)
-            {
-                memset(pszDest, STRSAFE_GET_FILL_PATTERN(dwFlags), cbDest);
-                if (STRSAFE_GET_FILL_PATTERN(dwFlags) == 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                }
-                else if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest + cchDest - 1;
-                    cchRemaining = 1;
-                    *pszDestEnd = '\0';
-                }
-            }
-            if (dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION))
-            {
-                if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                    *pszDestEnd = '\0';
-                }
-            }
-        }
-    }
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (ppszDestEnd) *ppszDestEnd = pszDestEnd;
-        if (pcchRemaining) *pcchRemaining = cchRemaining;
-    }
-    return hr;
-}
-
-HRESULT
-StringCopyExWorkerW(LPWSTR pszDest,
-                    size_t cchDest,
-                    size_t cbDest,
-                    LPCWSTR pszSrc,
-                    LPWSTR *ppszDestEnd,
-                    size_t* pcchRemaining,
-                    unsigned long dwFlags)
-{
-    HRESULT hr = S_OK;
-    LPWSTR  pszDestEnd = pszDest;
-    size_t cchRemaining = 0;
-
-    if (dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        if (dwFlags & STRSAFE_IGNORE_NULLS)
-        {
-            if (pszDest == NULL)
-            {
-                if ((cchDest != 0) || (cbDest != 0))
-                    hr = STRSAFE_E_INVALID_PARAMETER;
-            }
-
-            if (pszSrc == NULL) pszSrc = L"";
-        }
-        if (SUCCEEDED(hr))
-        {
-            if (cchDest == 0)
-            {
-                pszDestEnd = pszDest;
-                cchRemaining = 0;
-                if (*pszSrc != L'\0')
-                {
-                    if (pszDest == NULL)
-                        hr = STRSAFE_E_INVALID_PARAMETER;
-                    else
-                        hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-            }
-            else
-            {
-                pszDestEnd = pszDest;
-                cchRemaining = cchDest;
-                while (cchRemaining && (*pszSrc != L'\0'))
-                {
-                    *pszDestEnd++= *pszSrc++;
-                    cchRemaining--;
-                }
-                if (cchRemaining > 0)
-                {
-                    if (dwFlags & STRSAFE_FILL_BEHIND_NULL)
-                        memset(pszDestEnd + 1, STRSAFE_GET_FILL_PATTERN(dwFlags), ((cchRemaining - 1) * sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)));
-                }
-                else
-                {
-                    pszDestEnd--;
-                    cchRemaining++;
-                    hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-                *pszDestEnd = L'\0';
-            }
-        }
-    }
-    if (FAILED(hr))
-    {
-        if (pszDest)
-        {
-            if (dwFlags & STRSAFE_FILL_ON_FAILURE)
-            {
-                memset(pszDest, STRSAFE_GET_FILL_PATTERN(dwFlags), cbDest);
-                if (STRSAFE_GET_FILL_PATTERN(dwFlags) == 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                }
-                else if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest + cchDest - 1;
-                    cchRemaining = 1;
-                    *pszDestEnd = L'\0';
-                }
-            }
-            if (dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION))
-            {
-                if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                    *pszDestEnd = L'\0';
-                }
-            }
-        }
-    }
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (ppszDestEnd) *ppszDestEnd = pszDestEnd;
-        if (pcchRemaining) *pcchRemaining = cchRemaining;
-    }
-    return hr;
-}
-
-HRESULT
-StringCopyNWorkerA(LPTSTR pszDest,
-                   size_t cchDest,
-                   LPCTSTR pszSrc,
-                   size_t cchSrc)
-{
-    HRESULT hr = S_OK;
-
-    if (cchDest == 0) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        while (cchDest && cchSrc && (*pszSrc != '\0'))
-        {
-            *pszDest++= *pszSrc++;
-            cchDest--;
-            cchSrc--;
-        }
-        if (cchDest == 0)
-        {
-            pszDest--;
-            hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-        }
-        *pszDest= '\0';
-    }
-    return hr;
-}
-
-HRESULT
-StringCopyNWorkerW(LPWSTR pszDest,
-                   size_t cchDest,
-                   LPCWSTR pszSrc,
-                   size_t cchSrc)
-{
-    HRESULT hr = S_OK;
-
-    if (cchDest == 0) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        while (cchDest && cchSrc && (*pszSrc != L'\0'))
-        {
-            *pszDest++= *pszSrc++;
-            cchDest--;
-            cchSrc--;
-        }
-        if (cchDest == 0)
-        {
-            pszDest--;
-            hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-        }
-        *pszDest= L'\0';
-    }
-    return hr;
-}
-
-HRESULT
-StringCopyNExWorkerA(LPTSTR pszDest,
-                     size_t cchDest,
-                     size_t cbDest,
-                     LPCTSTR pszSrc,
-                     size_t cchSrc,
-                     LPTSTR *ppszDestEnd,
-                     size_t* pcchRemaining,
-                     unsigned long dwFlags)
-{
-    HRESULT hr = S_OK;
-    LPTSTR pszDestEnd = pszDest;
-    size_t cchRemaining = 0;
-
-    if (dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        if (dwFlags & STRSAFE_IGNORE_NULLS)
-        {
-            if (pszDest == NULL)
-            {
-                if ((cchDest != 0) || (cbDest != 0)) hr = STRSAFE_E_INVALID_PARAMETER;
-            }
-
-            if (pszSrc == NULL) pszSrc = "";
-        }
-        if (SUCCEEDED(hr))
-        {
-            if (cchDest == 0)
-            {
-                pszDestEnd = pszDest;
-                cchRemaining = 0;
-                if (*pszSrc != '\0')
-                {
-                    if (pszDest == NULL) hr = STRSAFE_E_INVALID_PARAMETER;
-                    else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-            }
-            else
-            {
-                pszDestEnd = pszDest;
-                cchRemaining = cchDest;
-                while (cchRemaining && cchSrc && (*pszSrc != '\0'))
-                {
-                    *pszDestEnd++= *pszSrc++;
-                    cchRemaining--;
-                    cchSrc--;
-                }
-                if (cchRemaining > 0)
-                {
-                    if (dwFlags & STRSAFE_FILL_BEHIND_NULL)
-                        memset(pszDestEnd + 1, STRSAFE_GET_FILL_PATTERN(dwFlags), ((cchRemaining - 1) * sizeof(char)) + (cbDest % sizeof(char)));
-                }
-                else
-                {
-                    pszDestEnd--;
-                    cchRemaining++;
-                    hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-                *pszDestEnd = '\0';
-            }
-        }
-    }
-    if (FAILED(hr))
-    {
-        if (pszDest)
-        {
-            if (dwFlags & STRSAFE_FILL_ON_FAILURE)
-            {
-                memset(pszDest, STRSAFE_GET_FILL_PATTERN(dwFlags), cbDest);
-                if (STRSAFE_GET_FILL_PATTERN(dwFlags) == 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                }
-                else if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest + cchDest - 1;
-                    cchRemaining = 1;
-                    *pszDestEnd = '\0';
-                }
-            }
-            if (dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION))
-            {
-                if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                    *pszDestEnd = '\0';
-                }
-            }
-        }
-    }
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (ppszDestEnd) *ppszDestEnd = pszDestEnd;
-        if (pcchRemaining) *pcchRemaining = cchRemaining;
-    }
-    return hr;
-}
-
-HRESULT
-StringCopyNExWorkerW(LPWSTR pszDest,
-                     size_t cchDest,
-                     size_t cbDest,
-                     LPCWSTR pszSrc,
-                     size_t cchSrc,
-                     LPWSTR *ppszDestEnd,
-                     size_t* pcchRemaining,
-                     unsigned long dwFlags)
-{
-    HRESULT hr = S_OK;
-    LPWSTR  pszDestEnd = pszDest;
-    size_t cchRemaining = 0;
-
-    if (dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        if (dwFlags & STRSAFE_IGNORE_NULLS)
-        {
-            if (pszDest == NULL)
-            {
-                if ((cchDest != 0) || (cbDest != 0)) hr = STRSAFE_E_INVALID_PARAMETER;
-            }
-            if (pszSrc == NULL) pszSrc = L"";
-        }
-        if (SUCCEEDED(hr))
-        {
-            if (cchDest == 0)
-            {
-                pszDestEnd = pszDest;
-                cchRemaining = 0;
-                if (*pszSrc != L'\0')
-                {
-                    if (pszDest == NULL) hr = STRSAFE_E_INVALID_PARAMETER;
-                    else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-            }
-            else
-            {
-                pszDestEnd = pszDest;
-                cchRemaining = cchDest;
-                while (cchRemaining && cchSrc && (*pszSrc != L'\0'))
-                {
-                    *pszDestEnd++= *pszSrc++;
-                    cchRemaining--;
-                    cchSrc--;
-                }
-                if (cchRemaining > 0)
-                {
-                    if (dwFlags & STRSAFE_FILL_BEHIND_NULL)
-                        memset(pszDestEnd + 1, STRSAFE_GET_FILL_PATTERN(dwFlags), ((cchRemaining - 1) * sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)));
-                }
-                else
-                {
-                    pszDestEnd--;
-                    cchRemaining++;
-                    hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-                *pszDestEnd = L'\0';
-            }
-        }
-    }
-    if (FAILED(hr))
-    {
-        if (pszDest)
-        {
-            if (dwFlags & STRSAFE_FILL_ON_FAILURE)
-            {
-                memset(pszDest, STRSAFE_GET_FILL_PATTERN(dwFlags), cbDest);
-                if (STRSAFE_GET_FILL_PATTERN(dwFlags) == 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                }
-                else if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest + cchDest - 1;
-                    cchRemaining = 1;
-                    *pszDestEnd = L'\0';
-                }
-            }
-            if (dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION))
-            {
-                if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                    *pszDestEnd = L'\0';
-                }
-            }
-        }
-    }
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (ppszDestEnd) *ppszDestEnd = pszDestEnd;
-        if (pcchRemaining) *pcchRemaining = cchRemaining;
-    }
-    return hr;
-}
-
-HRESULT
-StringCatWorkerA(LPTSTR pszDest,
-                 size_t cchDest,
-                 LPCTSTR pszSrc)
-{
-   HRESULT hr;
-   size_t cchDestCurrent;
-
-   hr = StringLengthWorkerA(pszDest, cchDest, &cchDestCurrent);
-   if (SUCCEEDED(hr))
-       hr = StringCopyWorkerA(pszDest + cchDestCurrent, cchDest - cchDestCurrent, pszSrc);
-   return hr;
-}
-
-HRESULT
-StringCatWorkerW(LPWSTR pszDest,
-                 size_t cchDest,
-                 LPCWSTR pszSrc)
-{
-   HRESULT hr;
-   size_t cchDestCurrent;
-
-   hr = StringLengthWorkerW(pszDest, cchDest, &cchDestCurrent);
-   if (SUCCEEDED(hr))
-       hr = StringCopyWorkerW(pszDest + cchDestCurrent, cchDest - cchDestCurrent, pszSrc);
-   return hr;
-}
-
-HRESULT
-StringCatExWorkerA(LPTSTR pszDest,
-                   size_t cchDest,
-                   size_t cbDest,
-                   LPCTSTR pszSrc,
-                   LPTSTR *ppszDestEnd,
-                   size_t* pcchRemaining,
-                   unsigned long dwFlags)
-{
-    HRESULT hr = S_OK;
-    LPTSTR pszDestEnd = pszDest;
-    size_t cchRemaining = 0;
-
-    if (dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cchDestCurrent;
-        if (dwFlags & STRSAFE_IGNORE_NULLS)
-        {
-            if (pszDest == NULL)
-            {
-                if ((cchDest == 0) && (cbDest == 0))
-                    cchDestCurrent = 0;
-                else
-                    hr = STRSAFE_E_INVALID_PARAMETER;
-            }
-            else
-            {
-                hr = StringLengthWorkerA(pszDest, cchDest, &cchDestCurrent);
-                if (SUCCEEDED(hr))
-                {
-                    pszDestEnd = pszDest + cchDestCurrent;
-                    cchRemaining = cchDest - cchDestCurrent;
-                }
-            }
-            if (pszSrc == NULL) pszSrc = "";
-        }
-        else
-        {
-            hr = StringLengthWorkerA(pszDest, cchDest, &cchDestCurrent);
-            if (SUCCEEDED(hr))
-            {
-                pszDestEnd = pszDest + cchDestCurrent;
-                cchRemaining = cchDest - cchDestCurrent;
-            }
-        }
-        if (SUCCEEDED(hr))
-        {
-            if (cchDest == 0)
-            {
-                if (*pszSrc != '\0')
-                {
-                    if (pszDest == NULL) hr = STRSAFE_E_INVALID_PARAMETER;
-                    else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-            }
-            else
-            {
-                hr = StringCopyExWorkerA(pszDestEnd,
-                                         cchRemaining,
-                                         (cchRemaining * sizeof(char)) + (cbDest % sizeof(char)),
-                                         pszSrc,
-                                         &pszDestEnd,
-                                         &cchRemaining,
-                                         dwFlags & (~(STRSAFE_FILL_ON_FAILURE | STRSAFE_NULL_ON_FAILURE)));
-            }
-        }
-    }
-    if (FAILED(hr))
-    {
-        if (pszDest)
-        {
-            if (dwFlags & STRSAFE_FILL_ON_FAILURE)
-            {
-                memset(pszDest, STRSAFE_GET_FILL_PATTERN(dwFlags), cbDest);
-                if (STRSAFE_GET_FILL_PATTERN(dwFlags) == 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                }
-                else
-                if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest + cchDest - 1;
-                    cchRemaining = 1;
-                    *pszDestEnd = '\0';
-                }
-            }
-            if (dwFlags & STRSAFE_NULL_ON_FAILURE)
-            {
-                if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                    *pszDestEnd = '\0';
-                }
-            }
-        }
-    }
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (ppszDestEnd) *ppszDestEnd = pszDestEnd;
-        if (pcchRemaining) *pcchRemaining = cchRemaining;
-    }
-    return hr;
-}
-
-HRESULT
-StringCatExWorkerW(LPWSTR pszDest,
-                   size_t cchDest,
-                   size_t cbDest,
-                   LPCWSTR pszSrc,
-                   LPWSTR *ppszDestEnd,
-                   size_t* pcchRemaining,
-                   unsigned long dwFlags)
-{
-    HRESULT hr = S_OK;
-    LPWSTR  pszDestEnd = pszDest;
-    size_t cchRemaining = 0;
-
-    if (dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cchDestCurrent;
-        if (dwFlags & STRSAFE_IGNORE_NULLS)
-        {
-            if (pszDest == NULL)
-            {
-                if ((cchDest == 0) && (cbDest == 0)) cchDestCurrent = 0;
-                else hr = STRSAFE_E_INVALID_PARAMETER;
-            }
-            else
-            {
-                hr = StringLengthWorkerW(pszDest, cchDest, &cchDestCurrent);
-                if (SUCCEEDED(hr))
-                {
-                    pszDestEnd = pszDest + cchDestCurrent;
-                    cchRemaining = cchDest - cchDestCurrent;
-                }
-            }
-            if (pszSrc == NULL) pszSrc = L"";
-        }
-        else
-        {
-            hr = StringLengthWorkerW(pszDest, cchDest, &cchDestCurrent);
-            if (SUCCEEDED(hr))
-            {
-                pszDestEnd = pszDest + cchDestCurrent;
-                cchRemaining = cchDest - cchDestCurrent;
-            }
-        }
-        if (SUCCEEDED(hr))
-        {
-            if (cchDest == 0)
-            {
-                if (*pszSrc != L'\0')
-                {
-                    if (pszDest == NULL) hr = STRSAFE_E_INVALID_PARAMETER;
-                    else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-            }
-            else
-            {
-                hr = StringCopyExWorkerW(pszDestEnd,
-                                         cchRemaining,
-                                         (cchRemaining * sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)),
-                                         pszSrc,
-                                         &pszDestEnd,
-                                         &cchRemaining,
-                                         dwFlags & (~(STRSAFE_FILL_ON_FAILURE | STRSAFE_NULL_ON_FAILURE)));
-            }
-        }
-    }
-    if (FAILED(hr))
-    {
-        if (pszDest)
-        {
-            if (dwFlags & STRSAFE_FILL_ON_FAILURE)
-            {
-                memset(pszDest, STRSAFE_GET_FILL_PATTERN(dwFlags), cbDest);
-                if (STRSAFE_GET_FILL_PATTERN(dwFlags) == 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                }
-                else if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest + cchDest - 1;
-                    cchRemaining = 1;
-                    *pszDestEnd = L'\0';
-                }
-            }
-            if (dwFlags & STRSAFE_NULL_ON_FAILURE)
-            {
-                if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                    *pszDestEnd = L'\0';
-                }
-            }
-        }
-    }
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (ppszDestEnd) *ppszDestEnd = pszDestEnd;
-        if (pcchRemaining) *pcchRemaining = cchRemaining;
-    }
-    return hr;
-}
-
-HRESULT
-StringCatNWorkerA(LPTSTR pszDest,
-                  size_t cchDest,
-                  LPCTSTR pszSrc,
-                  size_t cchMaxAppend)
-{
-    HRESULT hr;
-    size_t cchDestCurrent;
-
-    hr = StringLengthWorkerA(pszDest, cchDest, &cchDestCurrent);
-    if (SUCCEEDED(hr))
-        hr = StringCopyNWorkerA(pszDest + cchDestCurrent, cchDest - cchDestCurrent, pszSrc, cchMaxAppend);
-    return hr;
-}
-
-HRESULT
-StringCatNWorkerW(LPWSTR pszDest,
-                  size_t cchDest,
-                  LPCWSTR pszSrc,
-                  size_t cchMaxAppend)
-{
-    HRESULT hr;
-    size_t cchDestCurrent;
-
-    hr = StringLengthWorkerW(pszDest, cchDest, &cchDestCurrent);
-    if (SUCCEEDED(hr))
-        hr = StringCopyNWorkerW(pszDest + cchDestCurrent, cchDest - cchDestCurrent, pszSrc, cchMaxAppend);
-    return hr;
-}
-
-HRESULT
-StringCatNExWorkerA(LPTSTR pszDest,
-                    size_t cchDest,
-                    size_t cbDest,
-                    LPCTSTR pszSrc,
-                    size_t cchMaxAppend,
-                    LPTSTR *ppszDestEnd,
-                    size_t* pcchRemaining,
-                    unsigned long dwFlags)
-{
-    HRESULT hr = S_OK;
-    LPTSTR pszDestEnd = pszDest;
-    size_t cchRemaining = 0;
-    size_t cchDestCurrent = 0;
-
-    if (dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        if (dwFlags & STRSAFE_IGNORE_NULLS)
-        {
-            if (pszDest == NULL)
-            {
-                if ((cchDest == 0) && (cbDest == 0)) cchDestCurrent = 0;
-                else hr = STRSAFE_E_INVALID_PARAMETER;
-            }
-            else
-            {
-                hr = StringLengthWorkerA(pszDest, cchDest, &cchDestCurrent);
-                if (SUCCEEDED(hr))
-                {
-                    pszDestEnd = pszDest + cchDestCurrent;
-                    cchRemaining = cchDest - cchDestCurrent;
-                }
-            }
-            if (pszSrc == NULL) pszSrc = "";
-        }
-        else
-        {
-            hr = StringLengthWorkerA(pszDest, cchDest, &cchDestCurrent);
-            if (SUCCEEDED(hr))
-            {
-                pszDestEnd = pszDest + cchDestCurrent;
-                cchRemaining = cchDest - cchDestCurrent;
-            }
-        }
-        if (SUCCEEDED(hr))
-        {
-            if (cchDest == 0)
-            {
-                if (*pszSrc != '\0')
-                {
-                    if (pszDest == NULL) hr = STRSAFE_E_INVALID_PARAMETER;
-                    else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-            }
-            else
-            {
-                hr = StringCopyNExWorkerA(pszDestEnd,
-                                          cchRemaining,
-                                          (cchRemaining * sizeof(char)) + (cbDest % sizeof(char)),
-                                          pszSrc,
-                                          cchMaxAppend,
-                                          &pszDestEnd,
-                                          &cchRemaining,
-                                          dwFlags & (~(STRSAFE_FILL_ON_FAILURE | STRSAFE_NULL_ON_FAILURE)));
-            }
-        }
-    }
-
-    if (FAILED(hr))
-    {
-        if (pszDest)
-        {
-            if (dwFlags & STRSAFE_FILL_ON_FAILURE)
-            {
-                memset(pszDest, STRSAFE_GET_FILL_PATTERN(dwFlags), cbDest);
-                if (STRSAFE_GET_FILL_PATTERN(dwFlags) == 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                }
-                else if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest + cchDest - 1;
-                    cchRemaining = 1;
-                    *pszDestEnd = '\0';
-                }
-            }
-            if (dwFlags & (STRSAFE_NULL_ON_FAILURE))
-            {
-                if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                    *pszDestEnd = '\0';
-                }
-            }
-        }
-    }
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (ppszDestEnd) *ppszDestEnd = pszDestEnd;
-        if (pcchRemaining) *pcchRemaining = cchRemaining;
-    }
-    return hr;
-}
-
-HRESULT
-StringCatNExWorkerW(LPWSTR pszDest,
-                    size_t cchDest,
-                    size_t cbDest,
-                    LPCWSTR pszSrc,
-                    size_t cchMaxAppend,
-                    LPWSTR *ppszDestEnd,
-                    size_t* pcchRemaining,
-                    unsigned long dwFlags)
-{
-    HRESULT hr = S_OK;
-    LPWSTR  pszDestEnd = pszDest;
-    size_t cchRemaining = 0;
-    size_t cchDestCurrent = 0;
-
-    if (dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        if (dwFlags & STRSAFE_IGNORE_NULLS)
-        {
-            if (pszDest == NULL)
-            {
-                if ((cchDest == 0) && (cbDest == 0)) cchDestCurrent = 0;
-                else hr = STRSAFE_E_INVALID_PARAMETER;
-            }
-            else
-            {
-                hr = StringLengthWorkerW(pszDest, cchDest, &cchDestCurrent);
-                if (SUCCEEDED(hr))
-                {
-                    pszDestEnd = pszDest + cchDestCurrent;
-                    cchRemaining = cchDest - cchDestCurrent;
-                }
-            }
-            if (pszSrc == NULL) pszSrc = L"";
-        }
-        else
-        {
-            hr = StringLengthWorkerW(pszDest, cchDest, &cchDestCurrent);
-            if (SUCCEEDED(hr))
-            {
-                pszDestEnd = pszDest + cchDestCurrent;
-                cchRemaining = cchDest - cchDestCurrent;
-            }
-        }
-        if (SUCCEEDED(hr))
-        {
-            if (cchDest == 0)
-            {
-                if (*pszSrc != L'\0')
-                {
-                    if (pszDest == NULL) hr = STRSAFE_E_INVALID_PARAMETER;
-                    else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-            }
-            else
-            {
-                hr = StringCopyNExWorkerW(pszDestEnd,
-                                          cchRemaining,
-                                          (cchRemaining * sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)),
-                                          pszSrc,
-                                          cchMaxAppend,
-                                          &pszDestEnd,
-                                          &cchRemaining,
-                                          dwFlags & (~(STRSAFE_FILL_ON_FAILURE | STRSAFE_NULL_ON_FAILURE)));
-            }
-        }
-    }
-    if (FAILED(hr))
-    {
-        if (pszDest)
-        {
-            if (dwFlags & STRSAFE_FILL_ON_FAILURE)
-            {
-                memset(pszDest, STRSAFE_GET_FILL_PATTERN(dwFlags), cbDest);
-                if (STRSAFE_GET_FILL_PATTERN(dwFlags) == 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                }
-                else if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest + cchDest - 1;
-                    cchRemaining = 1;
-                    *pszDestEnd = L'\0';
-                }
-            }
-            if (dwFlags & (STRSAFE_NULL_ON_FAILURE))
-            {
-                if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                    *pszDestEnd = L'\0';
-                }
-            }
-        }
-    }
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (ppszDestEnd) *ppszDestEnd = pszDestEnd;
-        if (pcchRemaining) *pcchRemaining = cchRemaining;
-    }
-    return hr;
-}
-
-HRESULT
-StringVPrintfWorkerA(LPTSTR pszDest,
-                     size_t cchDest,
-                     LPCTSTR pszFormat,
-                     va_list argList)
-{
-    HRESULT hr = S_OK;
-
-    if (cchDest == 0) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        int iRet;
-        size_t cchMax;
-        cchMax = cchDest - 1;
-        iRet = _vsnprintf(pszDest, cchMax, pszFormat, argList);
-        if ((iRet < 0) || (((size_t)iRet) > cchMax))
-        {
-            pszDest += cchMax;
-            *pszDest = '\0';
-            hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-        }
-        else if (((size_t)iRet) == cchMax)
-        {
-            pszDest += cchMax;
-            *pszDest = '\0';
-        }
-    }
-    return hr;
-}
-
-HRESULT
-StringVPrintfWorkerW(LPWSTR pszDest,
-                     size_t cchDest,
-                     LPCWSTR pszFormat,
-                     va_list argList)
-{
-    HRESULT hr = S_OK;
-
-    if (cchDest == 0) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        int iRet;
-        size_t cchMax;
-        cchMax = cchDest - 1;
-        iRet = _vsnwprintf(pszDest, cchMax, pszFormat, argList);
-        if ((iRet < 0) || (((size_t)iRet) > cchMax))
-        {
-            pszDest += cchMax;
-            *pszDest = L'\0';
-            hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-        }
-        else if (((size_t)iRet) == cchMax)
-        {
-            pszDest += cchMax;
-            *pszDest = L'\0';
-        }
-    }
-    return hr;
-}
-
-HRESULT
-StringVPrintfExWorkerA(LPTSTR pszDest,
-                       size_t cchDest,
-                       size_t cbDest,
-                       LPTSTR *ppszDestEnd,
-                       size_t* pcchRemaining,
-                       unsigned long dwFlags,
-                       LPCTSTR pszFormat,
-                       va_list argList)
-{
-    HRESULT hr = S_OK;
-    LPTSTR pszDestEnd = pszDest;
-    size_t cchRemaining = 0;
-
-    if (dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        if (dwFlags & STRSAFE_IGNORE_NULLS)
-        {
-            if (pszDest == NULL)
-            {
-                if ((cchDest != 0) || (cbDest != 0))
-                    hr = STRSAFE_E_INVALID_PARAMETER;
-            }
-            if (pszFormat == NULL) pszFormat = "";
-        }
-        if (SUCCEEDED(hr))
-        {
-            if (cchDest == 0)
-            {
-                pszDestEnd = pszDest;
-                cchRemaining = 0;
-                if (*pszFormat != '\0')
-                {
-                    if (pszDest == NULL) hr = STRSAFE_E_INVALID_PARAMETER;
-                    else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-            }
-            else
-            {
-                int iRet;
-                size_t cchMax;
-                cchMax = cchDest - 1;
-                iRet = _vsnprintf(pszDest, cchMax, pszFormat, argList);
-                if ((iRet < 0) || (((size_t)iRet) > cchMax))
-                {
-                    pszDestEnd = pszDest + cchMax;
-                    cchRemaining = 1;
-                    *pszDestEnd = '\0';
-                    hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-                else if (((size_t)iRet) == cchMax)
-                {
-                    pszDestEnd = pszDest + cchMax;
-                    cchRemaining = 1;
-                    *pszDestEnd = '\0';
-                }
-                else if (((size_t)iRet) < cchMax)
-                {
-                    pszDestEnd = pszDest + iRet;
-                    cchRemaining = cchDest - iRet;
-                    if (dwFlags & STRSAFE_FILL_BEHIND_NULL)
-                        memset(pszDestEnd + 1, STRSAFE_GET_FILL_PATTERN(dwFlags), ((cchRemaining - 1) * sizeof(char)) + (cbDest % sizeof(char)));
-                }
-            }
-        }
-    }
-    if (FAILED(hr))
-    {
-        if (pszDest)
-        {
-            if (dwFlags & STRSAFE_FILL_ON_FAILURE)
-            {
-                memset(pszDest, STRSAFE_GET_FILL_PATTERN(dwFlags), cbDest);
-                if (STRSAFE_GET_FILL_PATTERN(dwFlags) == 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                }
-                else if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest + cchDest - 1;
-                    cchRemaining = 1;
-                    *pszDestEnd = '\0';
-                }
-            }
-            if (dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION))
-            {
-                if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                    *pszDestEnd = '\0';
-                }
-            }
-        }
-    }
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (ppszDestEnd) *ppszDestEnd = pszDestEnd;
-        if (pcchRemaining) *pcchRemaining = cchRemaining;
-    }
-    return hr;
-}
-
-HRESULT
-StringVPrintfExWorkerW(LPWSTR pszDest,
-                       size_t cchDest,
-                       size_t cbDest,
-                       LPWSTR *ppszDestEnd,
-                       size_t* pcchRemaining,
-                       unsigned long dwFlags,
-                       LPCWSTR pszFormat,
-                       va_list argList)
-{
-    HRESULT hr = S_OK;
-    LPWSTR  pszDestEnd = pszDest;
-    size_t cchRemaining = 0;
-
-    if (dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        if (dwFlags & STRSAFE_IGNORE_NULLS)
-        {
-            if (pszDest == NULL)
-            {
-                if ((cchDest != 0) || (cbDest != 0))
-                    hr = STRSAFE_E_INVALID_PARAMETER;
-            }
-
-            if (pszFormat == NULL) pszFormat = L"";
-        }
-        if (SUCCEEDED(hr))
-        {
-            if (cchDest == 0)
-            {
-                pszDestEnd = pszDest;
-                cchRemaining = 0;
-                if (*pszFormat != L'\0')
-                {
-                    if (pszDest == NULL) hr = STRSAFE_E_INVALID_PARAMETER;
-                    else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-            }
-            else
-            {
-                int iRet;
-                size_t cchMax;
-                cchMax = cchDest - 1;
-                iRet = _vsnwprintf(pszDest, cchMax, pszFormat, argList);
-                if ((iRet < 0) || (((size_t)iRet) > cchMax))
-                {
-                    pszDestEnd = pszDest + cchMax;
-                    cchRemaining = 1;
-                    *pszDestEnd = L'\0';
-                    hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-                }
-                else if (((size_t)iRet) == cchMax)
-                {
-                    pszDestEnd = pszDest + cchMax;
-                    cchRemaining = 1;
-                    *pszDestEnd = L'\0';
-                }
-                else if (((size_t)iRet) < cchMax)
-                {
-                    pszDestEnd = pszDest + iRet;
-                    cchRemaining = cchDest - iRet;
-                    if (dwFlags & STRSAFE_FILL_BEHIND_NULL)
-                        memset(pszDestEnd + 1, STRSAFE_GET_FILL_PATTERN(dwFlags), ((cchRemaining - 1) * sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)));
-                }
-            }
-        }
-    }
-    if (FAILED(hr))
-    {
-        if (pszDest)
-        {
-            if (dwFlags & STRSAFE_FILL_ON_FAILURE)
-            {
-                memset(pszDest, STRSAFE_GET_FILL_PATTERN(dwFlags), cbDest);
-                if (STRSAFE_GET_FILL_PATTERN(dwFlags) == 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                }
-                else if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest + cchDest - 1;
-                    cchRemaining = 1;
-                    *pszDestEnd = L'\0';
-                }
-            }
-            if (dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION))
-            {
-                if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                    *pszDestEnd = L'\0';
-                }
-            }
-        }
-    }
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (ppszDestEnd) *ppszDestEnd = pszDestEnd;
-        if (pcchRemaining) *pcchRemaining = cchRemaining;
-    }
-    return hr;
-}
-
-HRESULT
-StringLengthWorkerA(LPCTSTR psz,
-                    size_t cchMax,
-                    size_t* pcch)
-{
-    HRESULT hr = S_OK;
-    size_t cchMaxPrev = cchMax;
-
-    while (cchMax && (*psz != '\0')) psz++, cchMax--;
-    if (cchMax == 0) hr = STRSAFE_E_INVALID_PARAMETER;
-    if (SUCCEEDED(hr) && pcch) *pcch = cchMaxPrev - cchMax;
-    return hr;
-}
-
-HRESULT
-StringLengthWorkerW(LPCWSTR psz,
-                    size_t cchMax,
-                    size_t* pcch)
-{
-    HRESULT hr = S_OK;
-    size_t cchMaxPrev = cchMax;
-
-    while (cchMax && (*psz != L'\0')) psz++, cchMax--;
-    if (cchMax == 0) hr = STRSAFE_E_INVALID_PARAMETER;
-    if (SUCCEEDED(hr) && pcch) *pcch = cchMaxPrev - cchMax;
-    return hr;
-}
-
-STRSAFE_INLINE_API
-StringGetsExWorkerA(LPTSTR pszDest,
-                    size_t cchDest,
-                    size_t cbDest,
-                    LPTSTR *ppszDestEnd,
-                    size_t* pcchRemaining,
-                    unsigned long dwFlags)
-{
-    HRESULT hr = S_OK;
-    LPTSTR pszDestEnd = pszDest;
-    size_t cchRemaining = 0;
-
-    if (dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        if (dwFlags & STRSAFE_IGNORE_NULLS)
-        {
-            if (pszDest == NULL)
-            {
-                if ((cchDest != 0) || (cbDest != 0))
-                    hr = STRSAFE_E_INVALID_PARAMETER;
-            }
-        }
-        if (SUCCEEDED(hr))
-        {
-            if (cchDest <= 1)
-            {
-                pszDestEnd = pszDest;
-                cchRemaining = cchDest;
-                if (cchDest == 1) *pszDestEnd = '\0';
-                hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-            }
-            else
-            {
-                char ch;
-                pszDestEnd = pszDest;
-                cchRemaining = cchDest;
-                while ((cchRemaining > 1) && (ch = (char)getc(stdin)) != '\n')
-                {
-                    if (ch == EOF)
-                    {
-                        if (pszDestEnd == pszDest)
-                            hr = STRSAFE_E_END_OF_FILE;
-                        break;
-                    }
-                    *pszDestEnd = ch;
-                    pszDestEnd++;
-                    cchRemaining--;
-                }
-                if (cchRemaining > 0)
-                {
-                    if (dwFlags & STRSAFE_FILL_BEHIND_NULL)
-                        memset(pszDestEnd + 1, STRSAFE_GET_FILL_PATTERN(dwFlags), ((cchRemaining - 1) * sizeof(char)) + (cbDest % sizeof(char)));
-                }
-                *pszDestEnd = '\0';
-            }
-        }
-    }
-    if (FAILED(hr))
-    {
-        if (pszDest)
-        {
-            if (dwFlags & STRSAFE_FILL_ON_FAILURE)
-            {
-                memset(pszDest, STRSAFE_GET_FILL_PATTERN(dwFlags), cbDest);
-                if (STRSAFE_GET_FILL_PATTERN(dwFlags) == 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                }
-                else if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest + cchDest - 1;
-                    cchRemaining = 1;
-                    *pszDestEnd = '\0';
-                }
-            }
-            if (dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION))
-            {
-                if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                    *pszDestEnd = '\0';
-                }
-            }
-        }
-    }
-    if (SUCCEEDED(hr) ||
-        (hr == STRSAFE_E_INSUFFICIENT_BUFFER) ||
-        (hr == STRSAFE_E_END_OF_FILE))
-    {
-        if (ppszDestEnd) *ppszDestEnd = pszDestEnd;
-        if (pcchRemaining) *pcchRemaining = cchRemaining;
-    }
-    return hr;
-}
-
-STRSAFE_INLINE_API
-StringGetsExWorkerW(LPWSTR pszDest,
-                    size_t cchDest,
-                    size_t cbDest,
-                    LPWSTR *ppszDestEnd,
-                    size_t* pcchRemaining,
-                    unsigned long dwFlags)
-{
-    HRESULT hr = S_OK;
-    LPWSTR  pszDestEnd = pszDest;
-    size_t cchRemaining = 0;
-
-    if (dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        if (dwFlags & STRSAFE_IGNORE_NULLS)
-        {
-            if (pszDest == NULL)
-            {
-                if ((cchDest != 0) || (cbDest != 0))
-                    hr = STRSAFE_E_INVALID_PARAMETER;
-            }
-        }
-
-        if (SUCCEEDED(hr))
-        {
-            if (cchDest <= 1)
-            {
-                pszDestEnd = pszDest;
-                cchRemaining = cchDest;
-                if (cchDest == 1) *pszDestEnd = L'\0';
-                hr = STRSAFE_E_INSUFFICIENT_BUFFER;
-            }
-            else
-            {
-                wchar_t ch;
-                pszDestEnd = pszDest;
-                cchRemaining = cchDest;
-                while ((cchRemaining > 1) && (ch = (wchar_t)getwc(stdin)) != L'\n')
-                {
-                    if (ch == (wchar_t)EOF)
-                    {
-                        if (pszDestEnd == pszDest)
-                            hr = STRSAFE_E_END_OF_FILE;
-                        break;
-                    }
-                    *pszDestEnd = ch;
-                    pszDestEnd++;
-                    cchRemaining--;
-                }
-                if (cchRemaining > 0)
-                {
-                    if (dwFlags & STRSAFE_FILL_BEHIND_NULL)
-                        memset(pszDestEnd + 1, STRSAFE_GET_FILL_PATTERN(dwFlags), ((cchRemaining - 1) * sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)));
-                }
-                *pszDestEnd = L'\0';
-            }
-        }
-    }
-    if (FAILED(hr))
-    {
-        if (pszDest)
-        {
-            if (dwFlags & STRSAFE_FILL_ON_FAILURE)
-            {
-                memset(pszDest, STRSAFE_GET_FILL_PATTERN(dwFlags), cbDest);
-                if (STRSAFE_GET_FILL_PATTERN(dwFlags) == 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                }
-                else if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest + cchDest - 1;
-                    cchRemaining = 1;
-                    *pszDestEnd = L'\0';
-                }
-            }
-            if (dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION))
-            {
-                if (cchDest > 0)
-                {
-                    pszDestEnd = pszDest;
-                    cchRemaining = cchDest;
-                    *pszDestEnd = L'\0';
-                }
-            }
-        }
-    }
-    if (SUCCEEDED(hr) ||
-        (hr == STRSAFE_E_INSUFFICIENT_BUFFER) ||
-        (hr == STRSAFE_E_END_OF_FILE))
-    {
-        if (ppszDestEnd) *ppszDestEnd = pszDestEnd;
-        if (pcchRemaining) *pcchRemaining = cchRemaining;
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCchCatA(LPTSTR pszDest,
-             size_t cchDest,
-             LPCTSTR pszSrc)
-{
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringCatWorkerA(pszDest, cchDest, pszSrc);
-}
-
-STRSAFEAPI
-StringCchCatW(LPWSTR pszDest,
-             size_t cchDest,
-             LPCWSTR pszSrc)
-{
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringCatWorkerW(pszDest, cchDest, pszSrc);
-}
-
-STRSAFEAPI
-StringCchCatExA(LPTSTR pszDest,
-               size_t cchDest,
-               LPCTSTR pszSrc,
-               LPTSTR *ppszDestEnd,
-               size_t *pcchRemaining,
-               DWORD dwFlags)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        cbDest = cchDest * sizeof(char);
-        hr = StringCatExWorkerA(pszDest, cchDest, cbDest, pszSrc, ppszDestEnd, pcchRemaining, dwFlags);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCchCatExW(LPWSTR pszDest,
-               size_t cchDest,
-               LPCWSTR pszSrc,
-               LPWSTR *ppszDestEnd,
-               size_t *pcchRemaining,
-               DWORD dwFlags)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        cbDest = cchDest * sizeof(wchar_t);
-        hr = StringCatExWorkerW(pszDest, cchDest, cbDest, pszSrc, ppszDestEnd, pcchRemaining, dwFlags);
-    }
-
-    return hr;
-}
-
-STRSAFEAPI
-StringCchCatNA(LPTSTR pszDest,
-              size_t cchDest,
-              LPCTSTR pszSrc,
-              size_t cchMaxAppend)
-{
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringCatNWorkerA(pszDest, cchDest, pszSrc, cchMaxAppend);
-}
-
-STRSAFEAPI
-StringCchCatNW(LPWSTR pszDest,
-              size_t cchDest,
-              LPCWSTR pszSrc,
-              size_t cchMaxAppend)
-{
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringCatNWorkerW(pszDest, cchDest, pszSrc, cchMaxAppend);
-}
-
-STRSAFEAPI
-StringCchCatNExA(LPTSTR pszDest,
-                size_t cchDest,
-                LPCTSTR pszSrc,
-                size_t cchMaxAppend,
-                LPTSTR *ppszDestEnd,
-                size_t *pcchRemaining,
-                DWORD dwFlags)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        cbDest = cchDest * sizeof(char);
-        hr = StringCatNExWorkerA(pszDest, cchDest, cbDest, pszSrc, cchMaxAppend, ppszDestEnd, pcchRemaining, dwFlags);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCchCatNExW(LPWSTR pszDest,
-                size_t cchDest,
-                LPCWSTR pszSrc,
-                size_t cchMaxAppend,
-                LPWSTR *ppszDestEnd,
-                size_t *pcchRemaining,
-                DWORD dwFlags)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        cbDest = cchDest * sizeof(wchar_t);
-        hr = StringCatNExWorkerW(pszDest, cchDest, cbDest, pszSrc, cchMaxAppend, ppszDestEnd, pcchRemaining, dwFlags);
-    }
-
-    return hr;
-}
-
-STRSAFEAPI
-StringCchCopyA(LPTSTR pszDest,
-              size_t cchDest,
-              LPCTSTR pszSrc)
-{
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringCopyWorkerA(pszDest, cchDest, pszSrc);
-}
-
-STRSAFEAPI
-StringCchCopyW(LPWSTR pszDest,
-              size_t cchDest,
-              LPCWSTR pszSrc)
-{
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringCopyWorkerW(pszDest, cchDest, pszSrc);
-}
-
-STRSAFEAPI
-StringCchCopyExA(LPTSTR pszDest,
-                size_t cchDest,
-                LPCTSTR pszSrc,
-                LPTSTR *ppszDestEnd,
-                size_t *pcchRemaining,
-                DWORD dwFlags)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        cbDest = cchDest * sizeof(char);
-        hr = StringCopyExWorkerA(pszDest, cchDest, cbDest, pszSrc, ppszDestEnd, pcchRemaining, dwFlags);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCchCopyExW(LPWSTR pszDest,
-                size_t cchDest,
-                LPCWSTR pszSrc,
-                LPWSTR *ppszDestEnd,
-                size_t *pcchRemaining,
-                DWORD dwFlags)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        cbDest = cchDest * sizeof(wchar_t);
-        hr = StringCopyExWorkerW(pszDest, cchDest, cbDest, pszSrc, ppszDestEnd, pcchRemaining, dwFlags);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCchCopyNA(LPTSTR pszDest,
-               size_t cchDest,
-               LPCTSTR pszSrc,
-               size_t cchSrc)
-{
-    if ((cchDest > STRSAFE_MAX_CCH) || (cchSrc > STRSAFE_MAX_CCH))
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringCopyNWorkerA(pszDest, cchDest, pszSrc, cchSrc);
-}
-
-STRSAFEAPI
-StringCchCopyNW(LPWSTR pszDest,
-               size_t cchDest,
-               LPCWSTR pszSrc,
-               size_t cchSrc)
-{
-    if ((cchDest > STRSAFE_MAX_CCH) || (cchSrc > STRSAFE_MAX_CCH))
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringCopyNWorkerW(pszDest, cchDest, pszSrc, cchSrc);
-}
-
-STRSAFEAPI
-StringCchCopyNExA(LPTSTR pszDest,
-                 size_t cchDest,
-                 LPCTSTR pszSrc,
-                 size_t cchSrc,
-                 LPTSTR *ppszDestEnd,
-                 size_t *pcchRemaining,
-                 DWORD dwFlags)
-{
-    HRESULT hr;
-
-    if ((cchDest > STRSAFE_MAX_CCH) ||
-        (cchSrc > STRSAFE_MAX_CCH))
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        cbDest = cchDest * sizeof(char);
-        hr = StringCopyNExWorkerA(pszDest, cchDest, cbDest, pszSrc, cchSrc, ppszDestEnd, pcchRemaining, dwFlags);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCchCopyNExW(LPWSTR pszDest,
-                 size_t cchDest,
-                 LPCWSTR pszSrc,
-                 size_t cchSrc,
-                 LPWSTR *ppszDestEnd,
-                 size_t *pcchRemaining,
-                 DWORD dwFlags)
-{
-    HRESULT hr;
-
-    if ((cchDest > STRSAFE_MAX_CCH) ||
-        (cchSrc > STRSAFE_MAX_CCH))
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        cbDest = cchDest * sizeof(wchar_t);
-        hr = StringCopyNExWorkerW(pszDest, cchDest, cbDest, pszSrc, cchSrc, ppszDestEnd, pcchRemaining, dwFlags);
-    }
-    return hr;
-}
-
-STRSAFE_INLINE_API
-StringCchGetsA(LPTSTR pszDest,
-              size_t cchDest)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        cbDest = cchDest * sizeof(char);
-        hr = StringGetsExWorkerA(pszDest, cchDest, cbDest, NULL, NULL, 0);
-    }
-    return hr;
-}
-
-STRSAFE_INLINE_API
-StringCchGetsW(LPWSTR pszDest,
-              size_t cchDest)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        cbDest = cchDest * sizeof(wchar_t);
-        hr = StringGetsExWorkerW(pszDest, cchDest, cbDest, NULL, NULL, 0);
-    }
-    return hr;
-}
-
-STRSAFE_INLINE_API
-StringCchGetsExA(LPTSTR pszDest,
-                size_t cchDest,
-                LPTSTR *ppszDestEnd,
-                size_t *pcchRemaining,
-                DWORD dwFlags)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        cbDest = cchDest * sizeof(char);
-        hr = StringGetsExWorkerA(pszDest, cchDest, cbDest, ppszDestEnd, pcchRemaining, dwFlags);
-    }
-    return hr;
-}
-
-STRSAFE_INLINE_API
-StringCchGetsExW(LPWSTR pszDest,
-                size_t cchDest,
-                LPWSTR *ppszDestEnd,
-                size_t *pcchRemaining,
-                DWORD dwFlags)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        cbDest = cchDest * sizeof(wchar_t);
-        hr = StringGetsExWorkerW(pszDest, cchDest, cbDest, ppszDestEnd, pcchRemaining, dwFlags);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCchPrintfA(LPTSTR pszDest,
-                size_t cchDest,
-                LPCTSTR pszFormat,
-                ...)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        va_list argList;
-        va_start(argList, pszFormat);
-        hr = StringVPrintfWorkerA(pszDest, cchDest, pszFormat, argList);
-        va_end(argList);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCchPrintfW(LPWSTR pszDest,
-                size_t cchDest,
-                LPCWSTR pszFormat,
-                ...)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        va_list argList;
-        va_start(argList, pszFormat);
-        hr = StringVPrintfWorkerW(pszDest, cchDest, pszFormat, argList);
-        va_end(argList);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCchPrintfExA(LPTSTR pszDest,
-                  size_t cchDest,
-                  LPTSTR *ppszDestEnd,
-                  size_t *pcchRemaining,
-                  DWORD dwFlags,
-                  LPCTSTR pszFormat,
-                 ...)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        va_list argList;
-        cbDest = cchDest * sizeof(char);
-        va_start(argList, pszFormat);
-        hr = StringVPrintfExWorkerA(pszDest, cchDest, cbDest, ppszDestEnd, pcchRemaining, dwFlags, pszFormat, argList);
-        va_end(argList);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCchPrintfExW(LPWSTR pszDest,
-                  size_t cchDest,
-                  LPWSTR *ppszDestEnd,
-                  size_t *pcchRemaining,
-                  DWORD dwFlags,
-                  LPCWSTR pszFormat,
-                  ...)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        va_list argList;
-        cbDest = cchDest * sizeof(wchar_t);
-        va_start(argList, pszFormat);
-        hr = StringVPrintfExWorkerW(pszDest, cchDest, cbDest, ppszDestEnd, pcchRemaining, dwFlags, pszFormat, argList);
-        va_end(argList);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCchVPrintfA(LPTSTR pszDest,
-                 size_t cchDest,
-                 LPCTSTR pszFormat,
-                 va_list argList)
-{
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringVPrintfWorkerA(pszDest, cchDest, pszFormat, argList);
-}
-
-STRSAFEAPI
-StringCchVPrintfW(LPWSTR pszDest,
-                 size_t cchDest,
-                 LPCWSTR pszFormat,
-                 va_list argList)
-{
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringVPrintfWorkerW(pszDest, cchDest, pszFormat, argList);
-}
-
-STRSAFEAPI
-StringCchVPrintfExA(LPTSTR pszDest,
-                   size_t cchDest,
-                   LPTSTR *ppszDestEnd,
-                   size_t *pcchRemaining,
-                   DWORD dwFlags,
-                   LPCTSTR pszFormat,
-                   va_list argList)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        cbDest = cchDest * sizeof(char);
-        hr = StringVPrintfExWorkerA(pszDest, cchDest, cbDest, ppszDestEnd, pcchRemaining, dwFlags, pszFormat, argList);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCchVPrintfExW(LPWSTR pszDest,
-                   size_t cchDest,
-                   LPWSTR *ppszDestEnd,
-                   size_t *pcchRemaining,
-                   DWORD dwFlags,
-                   LPCWSTR pszFormat,
-                   va_list argList)
-{
-    HRESULT hr;
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cbDest;
-        cbDest = cchDest * sizeof(wchar_t);
-        hr = StringVPrintfExWorkerW(pszDest, cchDest, cbDest, ppszDestEnd, pcchRemaining, dwFlags, pszFormat, argList);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCchLengthA(LPCTSTR psz,
-                size_t cchMax,
-                size_t *pcch)
-{
-    if ((psz == NULL) || (cchMax > STRSAFE_MAX_CCH))
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringLengthWorkerA(psz, cchMax, pcch);
-}
-
-STRSAFEAPI
-StringCchLengthW(LPCWSTR psz,
-                size_t cchMax,
-                size_t *pcch)
-{
-    if ((psz == NULL) || (cchMax > STRSAFE_MAX_CCH))
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringLengthWorkerW(psz, cchMax, pcch);
-}
-
-STRSAFEAPI
-StringCbCatA(LPTSTR pszDest,
-            size_t cbDest,
-            LPCTSTR pszSrc)
-{
-    size_t cchDest;
-
-    cchDest = cbDest / sizeof(char);
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringCatWorkerA(pszDest, cchDest, pszSrc);
-}
-
-STRSAFEAPI
-StringCbCatW(LPWSTR pszDest,
-            size_t cbDest,
-            LPCWSTR pszSrc)
-{
-    size_t cchDest;
-
-    cchDest = cbDest / sizeof(wchar_t);
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringCatWorkerW(pszDest, cchDest, pszSrc);
-}
-
-STRSAFEAPI
-StringCbCatExA(LPTSTR pszDest,
-              size_t cbDest,
-              LPCTSTR pszSrc,
-              LPTSTR *ppszDestEnd,
-              size_t *pcbRemaining,
-              DWORD dwFlags)
-{
-    HRESULT hr;
-    size_t cchDest;
-    size_t cchRemaining = 0;
-
-    cchDest = cbDest / sizeof(char);
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-        hr = StringCatExWorkerA(pszDest, cchDest, cbDest, pszSrc, ppszDestEnd, &cchRemaining, dwFlags);
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (pcbRemaining)
-            *pcbRemaining = (cchRemaining * sizeof(char)) + (cbDest % sizeof(char));
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCbCatExW(LPWSTR pszDest,
-              size_t cbDest,
-              LPCWSTR pszSrc,
-              LPWSTR *ppszDestEnd,
-              size_t *pcbRemaining,
-              DWORD dwFlags)
-{
-    HRESULT hr;
-    size_t cchDest;
-    size_t cchRemaining = 0;
-
-    cchDest = cbDest / sizeof(wchar_t);
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-        hr = StringCatExWorkerW(pszDest, cchDest, cbDest, pszSrc, ppszDestEnd, &cchRemaining, dwFlags);
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (pcbRemaining)
-            *pcbRemaining = (cchRemaining * sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCbCatNA(LPTSTR pszDest,
-             size_t cbDest,
-             LPCTSTR pszSrc,
-             size_t cbMaxAppend)
-{
-    HRESULT hr;
-    size_t cchDest;
-
-    cchDest = cbDest / sizeof(char);
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cchMaxAppend;
-        cchMaxAppend = cbMaxAppend / sizeof(char);
-        hr = StringCatNWorkerA(pszDest, cchDest, pszSrc, cchMaxAppend);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCbCatNW(LPWSTR pszDest,
-             size_t cbDest,
-             LPCWSTR pszSrc,
-             size_t cbMaxAppend)
-{
-    HRESULT hr;
-    size_t cchDest;
-
-    cchDest = cbDest / sizeof(wchar_t);
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cchMaxAppend;
-        cchMaxAppend = cbMaxAppend / sizeof(wchar_t);
-        hr = StringCatNWorkerW(pszDest, cchDest, pszSrc, cchMaxAppend);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCbCatNExA(LPTSTR pszDest,
-               size_t cbDest,
-               LPCTSTR pszSrc,
-               size_t cbMaxAppend,
-               LPTSTR *ppszDestEnd,
-               size_t *pcbRemaining,
-               DWORD dwFlags)
-{
-    HRESULT hr;
-    size_t cchDest;
-    size_t cchRemaining = 0;
-
-    cchDest = cbDest / sizeof(char);
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cchMaxAppend;
-        cchMaxAppend = cbMaxAppend / sizeof(char);
-        hr = StringCatNExWorkerA(pszDest, cchDest, cbDest, pszSrc, cchMaxAppend, ppszDestEnd, &cchRemaining, dwFlags);
-    }
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (pcbRemaining)
-            *pcbRemaining = (cchRemaining * sizeof(char)) + (cbDest % sizeof(char));
-    }
-
-    return hr;
-}
-
-STRSAFEAPI
-StringCbCatNExW(LPWSTR pszDest,
-               size_t cbDest,
-               LPCWSTR pszSrc,
-               size_t cbMaxAppend,
-               LPWSTR *ppszDestEnd,
-               size_t *pcbRemaining,
-               DWORD dwFlags)
-{
-    HRESULT hr;
-    size_t cchDest;
-    size_t cchRemaining = 0;
-
-    cchDest = cbDest / sizeof(wchar_t);
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        size_t cchMaxAppend;
-        cchMaxAppend = cbMaxAppend / sizeof(wchar_t);
-        hr = StringCatNExWorkerW(pszDest, cchDest, cbDest, pszSrc, cchMaxAppend, ppszDestEnd, &cchRemaining, dwFlags);
-    }
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (pcbRemaining)
-            *pcbRemaining = (cchRemaining * sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCbCopyA(LPTSTR pszDest,
-             size_t cbDest,
-             LPCTSTR pszSrc)
-{
-    size_t cchDest;
-
-    cchDest = cbDest / sizeof(char);
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringCopyWorkerA(pszDest, cchDest, pszSrc);
-}
-
-STRSAFEAPI
-StringCbCopyW(LPWSTR pszDest,
-             size_t cbDest,
-             LPCWSTR pszSrc)
-{
-    size_t cchDest;
-
-    cchDest = cbDest / sizeof(wchar_t);
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringCopyWorkerW(pszDest, cchDest, pszSrc);
-}
-
-STRSAFEAPI
-StringCbCopyExA(LPTSTR pszDest,
-               size_t cbDest,
-               LPCTSTR pszSrc,
-               LPTSTR *ppszDestEnd,
-               size_t *pcbRemaining,
-               DWORD dwFlags)
-{
-    HRESULT hr;
-    size_t cchDest;
-    size_t cchRemaining = 0;
-
-    cchDest = cbDest / sizeof(char);
-
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-        hr = StringCopyExWorkerA(pszDest, cchDest, cbDest, pszSrc, ppszDestEnd, &cchRemaining, dwFlags);
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (pcbRemaining)
-            *pcbRemaining = (cchRemaining * sizeof(char)) + (cbDest % sizeof(char));
-    }
-
-    return hr;
-}
-
-STRSAFEAPI
-StringCbCopyExW(LPWSTR pszDest,
-               size_t cbDest,
-               LPCWSTR pszSrc,
-               LPWSTR *ppszDestEnd,
-               size_t *pcbRemaining,
-               DWORD dwFlags)
-{
-    HRESULT hr;
-    size_t cchDest;
-    size_t cchRemaining = 0;
-
-    cchDest = cbDest / sizeof(wchar_t);
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-        hr = StringCopyExWorkerW(pszDest, cchDest, cbDest, pszSrc, ppszDestEnd, &cchRemaining, dwFlags);
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (pcbRemaining)
-            *pcbRemaining = (cchRemaining * sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
-    }
-
-    return hr;
-}
-
-STRSAFEAPI
-StringCbCopyNA(LPTSTR pszDest,
-              size_t cbDest,
-              LPCTSTR pszSrc,
-              size_t cbSrc)
-{
-    size_t cchDest;
-    size_t cchSrc;
-
-    cchDest = cbDest / sizeof(char);
-    cchSrc = cbSrc / sizeof(char);
-    if ((cchDest > STRSAFE_MAX_CCH) || (cchSrc > STRSAFE_MAX_CCH))
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringCopyNWorkerA(pszDest, cchDest, pszSrc, cchSrc);
-}
-
-STRSAFEAPI
-StringCbCopyNW(LPWSTR pszDest,
-              size_t cbDest,
-              LPCWSTR pszSrc,
-              size_t cbSrc)
-{
-    size_t cchDest;
-    size_t cchSrc;
-
-    cchDest = cbDest / sizeof(wchar_t);
-    cchSrc = cbSrc / sizeof(wchar_t);
-    if ((cchDest > STRSAFE_MAX_CCH) || (cchSrc > STRSAFE_MAX_CCH))
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringCopyNWorkerW(pszDest, cchDest, pszSrc, cchSrc);
-}
-
-STRSAFEAPI
-StringCbCopyNExA(LPTSTR pszDest,
-                size_t cbDest,
-                LPCTSTR pszSrc,
-                size_t cbSrc,
-                LPTSTR *ppszDestEnd,
-                size_t *pcbRemaining,
-                DWORD dwFlags)
-{
-    HRESULT hr;
-    size_t cchDest;
-    size_t cchSrc;
-    size_t cchRemaining = 0;
-
-    cchDest = cbDest / sizeof(char);
-    cchSrc = cbSrc / sizeof(char);
-    if ((cchDest > STRSAFE_MAX_CCH) ||
-        (cchSrc > STRSAFE_MAX_CCH))
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-        hr = StringCopyNExWorkerA(pszDest, cchDest, cbDest, pszSrc, cchSrc, ppszDestEnd, &cchRemaining, dwFlags);
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (pcbRemaining)
-            *pcbRemaining = (cchRemaining * sizeof(char)) + (cbDest % sizeof(char));
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCbCopyNExW(LPWSTR pszDest,
-                size_t cbDest,
-                LPCWSTR pszSrc,
-                size_t cbSrc,
-                LPWSTR *ppszDestEnd,
-                size_t *pcbRemaining,
-                DWORD dwFlags)
-{
-    HRESULT hr;
-    size_t cchDest;
-    size_t cchSrc;
-    size_t cchRemaining = 0;
-
-    cchDest = cbDest / sizeof(wchar_t);
-    cchSrc = cbSrc / sizeof(wchar_t);
-    if ((cchDest > STRSAFE_MAX_CCH) ||
-        (cchSrc > STRSAFE_MAX_CCH))
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-        hr = StringCopyNExWorkerW(pszDest, cchDest, cbDest, pszSrc, cchSrc, ppszDestEnd, &cchRemaining, dwFlags);
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (pcbRemaining)
-            *pcbRemaining = (cchRemaining * sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
-    }
-    return hr;
-}
-
-STRSAFE_INLINE_API
-StringCbGetsA(LPTSTR pszDest,
-             size_t cbDest)
-{
-    size_t cchDest;
-
-    cchDest = cbDest / sizeof(char);
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringGetsExWorkerA(pszDest, cchDest, cbDest, NULL, NULL, 0);
-}
-
-STRSAFE_INLINE_API
-StringCbGetsW(LPWSTR pszDest,
-             size_t cbDest)
-{
-    size_t cchDest;
-
-    cchDest = cbDest / sizeof(wchar_t);
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringGetsExWorkerW(pszDest, cchDest, cbDest, NULL, NULL, 0);
-}
-
-STRSAFE_INLINE_API
-StringCbGetsExA(LPTSTR pszDest,
-               size_t cbDest,
-               LPTSTR *ppszDestEnd,
-               size_t *pcbRemaining,
-               DWORD dwFlags)
-{
-    HRESULT hr;
-    size_t cchDest;
-    size_t cchRemaining = 0;
-
-    cchDest = cbDest / sizeof(char);
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-        hr = StringGetsExWorkerA(pszDest, cchDest, cbDest, ppszDestEnd, &cchRemaining, dwFlags);
-    if (SUCCEEDED(hr) ||
-        (hr == STRSAFE_E_INSUFFICIENT_BUFFER) ||
-        (hr == STRSAFE_E_END_OF_FILE))
-    {
-        if (pcbRemaining)
-            *pcbRemaining = (cchRemaining * sizeof(char)) + (cbDest % sizeof(char));
-    }
-    return hr;
-}
-
-STRSAFE_INLINE_API
-StringCbGetsExW(LPWSTR pszDest,
-               size_t cbDest,
-               LPWSTR *ppszDestEnd,
-               size_t *pcbRemaining,
-               DWORD dwFlags)
-{
-    HRESULT hr;
-    size_t cchDest;
-    size_t cchRemaining = 0;
-
-    cchDest = cbDest / sizeof(wchar_t);
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-        hr = StringGetsExWorkerW(pszDest, cchDest, cbDest, ppszDestEnd, &cchRemaining, dwFlags);
-    if (SUCCEEDED(hr) ||
-        (hr == STRSAFE_E_INSUFFICIENT_BUFFER) ||
-        (hr == STRSAFE_E_END_OF_FILE))
-    {
-        if (pcbRemaining)
-            *pcbRemaining = (cchRemaining * sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCbPrintfA(LPTSTR pszDest,
-               size_t cbDest,
-               LPCTSTR pszFormat,
-               ...)
-{
-    HRESULT hr;
-    size_t cchDest;
-
-    cchDest = cbDest / sizeof(char);
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        va_list argList;
-        va_start(argList, pszFormat);
-        hr = StringVPrintfWorkerA(pszDest, cchDest, pszFormat, argList);
-        va_end(argList);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCbPrintfW(LPWSTR pszDest,
-               size_t cbDest,
-               LPCWSTR pszFormat,
-               ...)
-{
-    HRESULT hr;
-    size_t cchDest;
-
-    cchDest = cbDest / sizeof(wchar_t);
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        va_list argList;
-        va_start(argList, pszFormat);
-        hr = StringVPrintfWorkerW(pszDest, cchDest, pszFormat, argList);
-        va_end(argList);
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCbPrintfExA(LPTSTR pszDest,
-                 size_t cbDest,
-                 LPTSTR *ppszDestEnd,
-                 size_t *pcbRemaining,
-                 DWORD dwFlags,
-                 LPCTSTR pszFormat,
-                 ...)
-{
-    HRESULT hr;
-    size_t cchDest;
-    size_t cchRemaining = 0;
-
-    cchDest = cbDest / sizeof(char);
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        va_list argList;
-        va_start(argList, pszFormat);
-        hr = StringVPrintfExWorkerA(pszDest, cchDest, cbDest, ppszDestEnd, &cchRemaining, dwFlags, pszFormat, argList);
-        va_end(argList);
-    }
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (pcbRemaining)
-            *pcbRemaining = (cchRemaining * sizeof(char)) + (cbDest % sizeof(char));
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCbPrintfExW(LPWSTR pszDest,
-                 size_t cbDest,
-                 LPWSTR *ppszDestEnd,
-                 size_t *pcbRemaining,
-                 DWORD dwFlags,
-                 LPCWSTR pszFormat,
-                 ...)
-{
-    HRESULT hr;
-    size_t cchDest;
-    size_t cchRemaining = 0;
-
-    cchDest = cbDest / sizeof(wchar_t);
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-    {
-        va_list argList;
-        va_start(argList, pszFormat);
-        hr = StringVPrintfExWorkerW(pszDest, cchDest, cbDest, ppszDestEnd, &cchRemaining, dwFlags, pszFormat, argList);
-        va_end(argList);
-    }
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (pcbRemaining)
-            *pcbRemaining = (cchRemaining * sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCbVPrintfA(LPTSTR pszDest,
-                size_t cbDest,
-                LPCTSTR pszFormat,
-                va_list argList)
-{
-    size_t cchDest;
-
-    cchDest = cbDest / sizeof(char);
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringVPrintfWorkerA(pszDest, cchDest, pszFormat, argList);
-}
-
-STRSAFEAPI
-StringCbVPrintfW(LPWSTR pszDest,
-                size_t cbDest,
-                LPCWSTR pszFormat,
-                va_list argList)
-{
-    size_t cchDest;
-
-    cchDest = cbDest / sizeof(wchar_t);
-    if (cchDest > STRSAFE_MAX_CCH)
-        return STRSAFE_E_INVALID_PARAMETER;
-    else
-        return StringVPrintfWorkerW(pszDest, cchDest, pszFormat, argList);
-}
-
-STRSAFEAPI
-StringCbVPrintfExA(LPTSTR pszDest,
-                  size_t cbDest,
-                  LPTSTR *ppszDestEnd,
-                  size_t *pcbRemaining,
-                  DWORD dwFlags,
-                  LPCTSTR pszFormat,
-                  va_list argList)
-{
-    HRESULT hr;
-    size_t cchDest;
-    size_t cchRemaining = 0;
-
-    cchDest = cbDest / sizeof(char);
-    if (cchDest > STRSAFE_MAX_CCH)
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-        hr = StringVPrintfExWorkerA(pszDest, cchDest, cbDest, ppszDestEnd, &cchRemaining, dwFlags, pszFormat, argList);
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (pcbRemaining)
-            *pcbRemaining = (cchRemaining * sizeof(char)) + (cbDest % sizeof(char));
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCbVPrintfExW(LPWSTR pszDest,
-                  size_t cbDest,
-                  LPWSTR *ppszDestEnd,
-                  size_t *pcbRemaining,
-                  DWORD dwFlags,
-                  LPCWSTR pszFormat,
-                  va_list argList)
-{
-    HRESULT hr;
-    size_t cchDest;
-    size_t cchRemaining = 0;
-
-    cchDest = cbDest / sizeof(wchar_t);
-    if (cchDest > STRSAFE_MAX_CCH)
-           hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-        hr = StringVPrintfExWorkerW(pszDest, cchDest, cbDest, ppszDestEnd, &cchRemaining, dwFlags, pszFormat, argList);
-    if (SUCCEEDED(hr) || (hr == STRSAFE_E_INSUFFICIENT_BUFFER))
-    {
-        if (pcbRemaining)
-            *pcbRemaining = (cchRemaining * sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
-    }
-    return hr;
-}
-
-STRSAFEAPI
-StringCbLengthA(LPCTSTR psz,
-               size_t cbMax,
-               size_t *pcb)
-{
-    HRESULT hr;
-    size_t cchMax;
-    size_t cch = 0;
-
-    cchMax = cbMax / sizeof(char);
-    if ((psz == NULL) || (cchMax > STRSAFE_MAX_CCH))
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-        hr = StringLengthWorkerA(psz, cchMax, &cch);
-    if (SUCCEEDED(hr) && pcb) *pcb = cch * sizeof(char);
-    return hr;
-}
-
-STRSAFEAPI
-StringCbLengthW(LPCWSTR psz,
-               size_t cbMax,
-               size_t *pcb)
-{
-    HRESULT hr;
-    size_t cchMax;
-    size_t cch = 0;
-
-    cchMax = cbMax / sizeof(wchar_t);
-    if ((psz == NULL) || (cchMax > STRSAFE_MAX_CCH))
-        hr = STRSAFE_E_INVALID_PARAMETER;
-    else
-        hr = StringLengthWorkerW(psz, cchMax, &cch);
-    if (SUCCEEDED(hr) && pcb) *pcb = cch * sizeof(wchar_t);
-    return hr;
-}
diff --git a/reactos/lib/sdk/strsafe/strsafe.rbuild b/reactos/lib/sdk/strsafe/strsafe.rbuild
deleted file mode 100644 (file)
index eeec182..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
-<module name="strsafe" type="staticlibrary" allowwarnings="true">
-       <define name="_DISABLE_TIDENTS" />
-       <file>strsafe.c</file>
-</module>