| /** |
| * This file has no copyright assigned and is placed in the Public Domain. |
| * This file is part of the mingw-w64 runtime package. |
| * No warranty is given; refer to the file DISCLAIMER.PD within this package. |
| */ |
| #ifndef _STRSAFE_H_INCLUDED_ |
| #define _STRSAFE_H_INCLUDED_ |
| |
| #include <_mingw_unicode.h> |
| #include <stdio.h> |
| #include <string.h> |
| #include <stdarg.h> |
| #include <specstrings.h> |
| |
| #if defined(__CRT__NO_INLINE) && !defined(__CRT_STRSAFE_IMPL) |
| #define __STRSAFE__NO_INLINE |
| #endif |
| |
| #ifndef _SIZE_T_DEFINED |
| #define _SIZE_T_DEFINED |
| #undef size_t |
| #ifdef _WIN64 |
| __MINGW_EXTENSION typedef unsigned __int64 size_t; |
| #else |
| typedef unsigned int size_t; |
| #endif |
| #endif |
| |
| #ifndef _SSIZE_T_DEFINED |
| #define _SSIZE_T_DEFINED |
| #undef ssize_t |
| #ifdef _WIN64 |
| __MINGW_EXTENSION typedef __int64 ssize_t; |
| #else |
| typedef int ssize_t; |
| #endif |
| #endif |
| |
| #ifndef _WCHAR_T_DEFINED |
| #define _WCHAR_T_DEFINED |
| typedef unsigned short wchar_t; |
| #endif |
| |
| #ifndef _HRESULT_DEFINED |
| #define _HRESULT_DEFINED |
| typedef __LONG32 HRESULT; |
| #endif |
| |
| #ifndef SUCCEEDED |
| #define SUCCEEDED(hr) ((HRESULT)(hr) >= 0) |
| #endif |
| |
| #ifndef FAILED |
| #define FAILED(hr) ((HRESULT)(hr) < 0) |
| #endif |
| |
| #ifndef S_OK |
| #define S_OK ((HRESULT)0x00000000) |
| #endif |
| |
| #ifndef C_ASSERT |
| #ifdef _MSC_VER |
| # define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1] |
| #else |
| # define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1]) |
| #endif |
| #endif /* C_ASSERT */ |
| |
| /* extern removed for C mode to avoid double extern qualifier from __CRT_INLINE */ |
| #ifdef __cplusplus |
| #define _STRSAFE_EXTERN_C extern "C" |
| #else |
| #define _STRSAFE_EXTERN_C |
| #endif |
| |
| #ifndef WINAPI |
| #if defined(_ARM_) |
| #define WINAPI |
| #else |
| #define WINAPI __stdcall |
| #endif |
| #endif |
| |
| #ifndef __CRT_STRSAFE_IMPL |
| #define STRSAFEAPI _STRSAFE_EXTERN_C __inline HRESULT WINAPI |
| #else |
| #define STRSAFEAPI HRESULT WINAPI |
| #endif |
| |
| #ifndef __CRT_STRSAFE_IMPL |
| #define STRSAFE_INLINE_API _STRSAFE_EXTERN_C __CRT_INLINE HRESULT WINAPI |
| #else |
| #define STRSAFE_INLINE_API HRESULT WINAPI |
| #endif |
| |
| #define STRSAFE_MAX_CCH 2147483647 |
| |
| #ifndef _NTSTRSAFE_H_INCLUDED_ |
| #define STRSAFE_IGNORE_NULLS 0x00000100 |
| #define STRSAFE_FILL_BEHIND_NULL 0x00000200 |
| #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 __LONG32)((x & 0x000000FF) | STRSAFE_FILL_BEHIND_NULL)) |
| #define STRSAFE_FAILURE_BYTE(x) ((unsigned __LONG32)((x & 0x000000FF) | STRSAFE_FILL_ON_FAILURE)) |
| |
| #define STRSAFE_GET_FILL_PATTERN(dwFlags) ((int)(dwFlags & 0x000000FF)) |
| #endif |
| |
| #define STRSAFE_E_INSUFFICIENT_BUFFER ((HRESULT)0x8007007A) |
| #define STRSAFE_E_INVALID_PARAMETER ((HRESULT)0x80070057) |
| #define STRSAFE_E_END_OF_FILE ((HRESULT)0x80070026) |
| |
| typedef char *STRSAFE_LPSTR; |
| typedef const char *STRSAFE_LPCSTR; |
| typedef wchar_t *STRSAFE_LPWSTR; |
| typedef const wchar_t *STRSAFE_LPCWSTR; |
| |
| STRSAFEAPI StringCopyWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc); |
| STRSAFEAPI StringCopyWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc); |
| STRSAFEAPI StringCopyExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCopyExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCopyNWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy); |
| STRSAFEAPI StringCopyNWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy); |
| STRSAFEAPI StringCopyNExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCopyNExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCatWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc); |
| STRSAFEAPI StringCatWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc); |
| STRSAFEAPI StringCatExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCatExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCatNWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend); |
| STRSAFEAPI StringCatNWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend); |
| STRSAFEAPI StringCatNExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCatNExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringVPrintfWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,va_list argList); |
| STRSAFEAPI StringVPrintfWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,va_list argList); |
| STRSAFEAPI StringVPrintfExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList); |
| STRSAFEAPI StringVPrintfExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList); |
| STRSAFEAPI StringLengthWorkerA(STRSAFE_LPCSTR psz,size_t cchMax,size_t *pcchLength); |
| STRSAFEAPI StringLengthWorkerW(STRSAFE_LPCWSTR psz,size_t cchMax,size_t *pcchLength); |
| STRSAFE_INLINE_API StringGetsExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| STRSAFE_INLINE_API StringGetsExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| |
| #define StringCchCopy __MINGW_NAME_AW(StringCchCopy) |
| |
| STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc); |
| STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc); |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc) { |
| return (cchDest > STRSAFE_MAX_CCH ? STRSAFE_E_INVALID_PARAMETER : StringCopyWorkerA(pszDest,cchDest,pszSrc)); |
| } |
| |
| STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc) { |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCopyWorkerW(pszDest,cchDest,pszSrc); |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| #define StringCbCopy __MINGW_NAME_AW(StringCbCopy) |
| |
| STRSAFEAPI StringCbCopyA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc); |
| STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc); |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCbCopyA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc) { |
| if(cbDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCopyWorkerA(pszDest,cbDest,pszSrc); |
| } |
| |
| STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc) { |
| size_t cchDest = cbDest / sizeof(wchar_t); |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCopyWorkerW(pszDest,cchDest,pszSrc); |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| #define StringCchCopyEx __MINGW_NAME_AW(StringCchCopyEx) |
| |
| STRSAFEAPI StringCchCopyExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCchCopyExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCchCopyExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCopyExWorkerA(pszDest,cchDest,cchDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags); |
| } |
| |
| STRSAFEAPI StringCchCopyExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| size_t cbDest; |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| cbDest = cchDest * sizeof(wchar_t); |
| return StringCopyExWorkerW(pszDest,cchDest,cbDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags); |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| #define StringCbCopyEx __MINGW_NAME_AW(StringCbCopyEx) |
| |
| STRSAFEAPI StringCbCopyExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCbCopyExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags); |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCbCopyExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr; |
| size_t cchRemaining = 0; |
| if(cbDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| hr = StringCopyExWorkerA(pszDest,cbDest,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(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr; |
| size_t cchDest = cbDest / sizeof(wchar_t); |
| size_t cchRemaining = 0; |
| |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| 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; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCchCopyNA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy); |
| STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy); |
| #define StringCchCopyN __MINGW_NAME_AW(StringCchCopyN) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCchCopyNA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy) { |
| if(cchDest > STRSAFE_MAX_CCH || cchToCopy > STRSAFE_MAX_CCH) |
| return STRSAFE_E_INVALID_PARAMETER; |
| return StringCopyNWorkerA(pszDest,cchDest,pszSrc,cchToCopy); |
| } |
| |
| STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy) { |
| if(cchDest > STRSAFE_MAX_CCH || cchToCopy > STRSAFE_MAX_CCH) |
| return STRSAFE_E_INVALID_PARAMETER; |
| return StringCopyNWorkerW(pszDest,cchDest,pszSrc,cchToCopy); |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCbCopyNA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToCopy); |
| STRSAFEAPI StringCbCopyNW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToCopy); |
| |
| #define StringCbCopyN __MINGW_NAME_AW(StringCbCopyN) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCbCopyNA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToCopy) { |
| if(cbDest > STRSAFE_MAX_CCH || cbToCopy > STRSAFE_MAX_CCH) |
| return STRSAFE_E_INVALID_PARAMETER; |
| return StringCopyNWorkerA(pszDest,cbDest,pszSrc,cbToCopy); |
| } |
| |
| STRSAFEAPI StringCbCopyNW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToCopy) { |
| size_t cchDest = cbDest / sizeof(wchar_t); |
| size_t cchToCopy = cbToCopy / sizeof(wchar_t); |
| if(cchDest > STRSAFE_MAX_CCH || cchToCopy > STRSAFE_MAX_CCH) |
| return STRSAFE_E_INVALID_PARAMETER; |
| return StringCopyNWorkerW(pszDest,cchDest,pszSrc,cchToCopy); |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCchCopyNExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCchCopyNExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| |
| #define StringCchCopyNEx __MINGW_NAME_AW(StringCchCopyNEx) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCchCopyNExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCopyNExWorkerA(pszDest,cchDest,cchDest,pszSrc,cchToCopy,ppszDestEnd,pcchRemaining,dwFlags); |
| } |
| |
| STRSAFEAPI StringCchCopyNExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCopyNExWorkerW(pszDest,cchDest,cchDest * sizeof(wchar_t),pszSrc,cchToCopy,ppszDestEnd,pcchRemaining,dwFlags); |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCbCopyNExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCbCopyNExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags); |
| |
| #define StringCbCopyNEx __MINGW_NAME_AW(StringCbCopyNEx) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCbCopyNExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr; |
| size_t cchRemaining = 0; |
| if(cbDest > STRSAFE_MAX_CCH) |
| hr = STRSAFE_E_INVALID_PARAMETER; |
| else |
| hr = StringCopyNExWorkerA(pszDest,cbDest,cbDest,pszSrc,cbToCopy,ppszDestEnd,&cchRemaining,dwFlags); |
| if((SUCCEEDED(hr) || hr == STRSAFE_E_INSUFFICIENT_BUFFER) && pcbRemaining) |
| *pcbRemaining = cchRemaining; |
| return hr; |
| } |
| |
| STRSAFEAPI StringCbCopyNExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr; |
| size_t cchDest; |
| size_t cchToCopy; |
| size_t cchRemaining = 0; |
| cchDest = cbDest / sizeof(wchar_t); |
| cchToCopy = cbToCopy / sizeof(wchar_t); |
| if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER; |
| else hr = StringCopyNExWorkerW(pszDest,cchDest,cbDest,pszSrc,cchToCopy,ppszDestEnd,&cchRemaining,dwFlags); |
| if((SUCCEEDED(hr) || hr == STRSAFE_E_INSUFFICIENT_BUFFER) && pcbRemaining) |
| *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)); |
| return hr; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCchCatA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc); |
| STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc); |
| |
| #define StringCchCat __MINGW_NAME_AW(StringCchCat) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCchCatA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc) { |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCatWorkerA(pszDest,cchDest,pszSrc); |
| } |
| |
| STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc) { |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCatWorkerW(pszDest,cchDest,pszSrc); |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCbCatA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc); |
| STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc); |
| |
| #define StringCbCat __MINGW_NAME_AW(StringCbCat) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCbCatA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc) { |
| if(cbDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCatWorkerA(pszDest,cbDest,pszSrc); |
| } |
| |
| STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc) { |
| size_t cchDest = cbDest / sizeof(wchar_t); |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCatWorkerW(pszDest,cchDest,pszSrc); |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCchCatExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCchCatExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| |
| #define StringCchCatEx __MINGW_NAME_AW(StringCchCatEx) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCchCatExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCatExWorkerA(pszDest,cchDest,cchDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags); |
| } |
| |
| STRSAFEAPI StringCchCatExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| size_t cbDest = cchDest*sizeof(wchar_t); |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCatExWorkerW(pszDest,cchDest,cbDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags); |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCbCatExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCbCatExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags); |
| |
| #define StringCbCatEx __MINGW_NAME_AW(StringCbCatEx) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCbCatExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr; |
| size_t cchRemaining = 0; |
| if(cbDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER; |
| else hr = StringCatExWorkerA(pszDest,cbDest,cbDest,pszSrc,ppszDestEnd,&cchRemaining,dwFlags); |
| if((SUCCEEDED(hr) || hr == STRSAFE_E_INSUFFICIENT_BUFFER) && pcbRemaining) |
| *pcbRemaining = (cchRemaining*sizeof(char)) + (cbDest % sizeof(char)); |
| return hr; |
| } |
| |
| STRSAFEAPI StringCbCatExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr; |
| size_t cchDest = cbDest / sizeof(wchar_t); |
| size_t cchRemaining = 0; |
| |
| 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) && pcbRemaining) |
| *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)); |
| return hr; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCchCatNA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend); |
| STRSAFEAPI StringCchCatNW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend); |
| |
| #define StringCchCatN __MINGW_NAME_AW(StringCchCatN) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCchCatNA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend) { |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCatNWorkerA(pszDest,cchDest,pszSrc,cchToAppend); |
| } |
| |
| STRSAFEAPI StringCchCatNW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend) { |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCatNWorkerW(pszDest,cchDest,pszSrc,cchToAppend); |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCbCatNA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToAppend); |
| STRSAFEAPI StringCbCatNW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToAppend); |
| |
| #define StringCbCatN __MINGW_NAME_AW(StringCbCatN) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCbCatNA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToAppend) { |
| if(cbDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCatNWorkerA(pszDest,cbDest,pszSrc,cbToAppend); |
| } |
| |
| STRSAFEAPI StringCbCatNW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToAppend) { |
| size_t cchDest = cbDest / sizeof(wchar_t); |
| size_t cchToAppend = cbToAppend / sizeof(wchar_t); |
| |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCatNWorkerW(pszDest,cchDest,pszSrc,cchToAppend); |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCchCatNExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCchCatNExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| |
| #define StringCchCatNEx __MINGW_NAME_AW(StringCchCatNEx) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCchCatNExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCatNExWorkerA(pszDest,cchDest,cchDest,pszSrc,cchToAppend,ppszDestEnd,pcchRemaining,dwFlags); |
| } |
| |
| STRSAFEAPI StringCchCatNExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringCatNExWorkerW(pszDest,cchDest,(cchDest*sizeof(wchar_t)),pszSrc,cchToAppend,ppszDestEnd,pcchRemaining,dwFlags); |
| } |
| #endif |
| |
| STRSAFEAPI StringCbCatNExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags); |
| STRSAFEAPI StringCbCatNExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags); |
| |
| #define StringCbCatNEx __MINGW_NAME_AW(StringCbCatNEx) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCbCatNExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr; |
| size_t cchRemaining = 0; |
| if(cbDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER; |
| else hr = StringCatNExWorkerA(pszDest,cbDest,cbDest,pszSrc,cbToAppend,ppszDestEnd,&cchRemaining,dwFlags); |
| if((SUCCEEDED(hr) || hr == STRSAFE_E_INSUFFICIENT_BUFFER) && pcbRemaining) |
| *pcbRemaining = (cchRemaining*sizeof(char)) + (cbDest % sizeof(char)); |
| return hr; |
| } |
| |
| STRSAFEAPI StringCbCatNExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr; |
| size_t cchDest = cbDest / sizeof(wchar_t); |
| size_t cchToAppend = cbToAppend / sizeof(wchar_t); |
| size_t cchRemaining = 0; |
| if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER; |
| else hr = StringCatNExWorkerW(pszDest,cchDest,cbDest,pszSrc,cchToAppend,ppszDestEnd,&cchRemaining,dwFlags); |
| if((SUCCEEDED(hr) || hr == STRSAFE_E_INSUFFICIENT_BUFFER) && pcbRemaining) |
| *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)); |
| return hr; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCchVPrintfA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,va_list argList); |
| STRSAFEAPI StringCchVPrintfW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,va_list argList); |
| |
| #define StringCchVPrintf __MINGW_NAME_AW(StringCchVPrintf) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCchVPrintfA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,va_list argList) { |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringVPrintfWorkerA(pszDest,cchDest,pszFormat,argList); |
| } |
| |
| STRSAFEAPI StringCchVPrintfW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,va_list argList) { |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList); |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCbVPrintfA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszFormat,va_list argList); |
| STRSAFEAPI StringCbVPrintfW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszFormat,va_list argList); |
| |
| #define StringCbVPrintf __MINGW_NAME_AW(StringCbVPrintf) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCbVPrintfA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszFormat,va_list argList) { |
| if(cbDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringVPrintfWorkerA(pszDest,cbDest,pszFormat,argList); |
| } |
| |
| STRSAFEAPI StringCbVPrintfW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszFormat,va_list argList) { |
| size_t cchDest = cbDest / sizeof(wchar_t); |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| return StringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList); |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCchPrintfA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,...); |
| STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,...); |
| |
| #define StringCchPrintf __MINGW_NAME_AW(StringCchPrintf) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCchPrintfA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,...) { |
| HRESULT hr; |
| va_list argList; |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| va_start(argList,pszFormat); |
| hr = StringVPrintfWorkerA(pszDest,cchDest,pszFormat,argList); |
| va_end(argList); |
| return hr; |
| } |
| |
| STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,...) { |
| HRESULT hr; |
| va_list argList; |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| va_start(argList,pszFormat); |
| hr = StringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList); |
| va_end(argList); |
| return hr; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCbPrintfA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszFormat,...); |
| STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszFormat,...); |
| |
| #define StringCbPrintf __MINGW_NAME_AW(StringCbPrintf) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCbPrintfA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszFormat,...) { |
| HRESULT hr; |
| va_list argList; |
| if(cbDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| va_start(argList,pszFormat); |
| hr = StringVPrintfWorkerA(pszDest,cbDest,pszFormat,argList); |
| va_end(argList); |
| return hr; |
| } |
| |
| STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszFormat,...) { |
| HRESULT hr; |
| va_list argList; |
| size_t cchDest = cbDest / sizeof(wchar_t); |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| va_start(argList,pszFormat); |
| hr = StringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList); |
| va_end(argList); |
| return hr; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCchPrintfExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCSTR pszFormat,...); |
| STRSAFEAPI StringCchPrintfExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCWSTR pszFormat,...); |
| |
| #define StringCchPrintfEx __MINGW_NAME_AW(StringCchPrintfEx) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCchPrintfExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCSTR pszFormat,...) { |
| HRESULT hr; |
| va_list argList; |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| va_start(argList,pszFormat); |
| hr = StringVPrintfExWorkerA(pszDest,cchDest,cchDest,ppszDestEnd,pcchRemaining,dwFlags,pszFormat,argList); |
| va_end(argList); |
| return hr; |
| } |
| |
| STRSAFEAPI StringCchPrintfExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCWSTR pszFormat,...) { |
| HRESULT hr; |
| size_t cbDest = cchDest * sizeof(wchar_t); |
| va_list argList; |
| if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER; |
| va_start(argList,pszFormat); |
| hr = StringVPrintfExWorkerW(pszDest,cchDest,cbDest,ppszDestEnd,pcchRemaining,dwFlags,pszFormat,argList); |
| va_end(argList); |
| return hr; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCbPrintfExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCSTR pszFormat,...); |
| STRSAFEAPI StringCbPrintfExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCWSTR pszFormat,...); |
| |
| #define StringCbPrintfEx __MINGW_NAME_AW(StringCbPrintfEx) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCbPrintfExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCSTR 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(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,STRSAFE_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; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCchVPrintfExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList); |
| STRSAFEAPI StringCchVPrintfExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList); |
| |
| #define StringCchVPrintfEx __MINGW_NAME_AW(StringCchVPrintfEx) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCchVPrintfExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCSTR 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(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,STRSAFE_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; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCbVPrintfExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList); |
| STRSAFEAPI StringCbVPrintfExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList); |
| |
| #define StringCbVPrintfEx __MINGW_NAME_AW(StringCbVPrintfEx) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCbVPrintfExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCSTR 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(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,STRSAFE_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; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFE_INLINE_API StringCchGetsA(STRSAFE_LPSTR pszDest,size_t cchDest); |
| STRSAFE_INLINE_API StringCchGetsW(STRSAFE_LPWSTR pszDest,size_t cchDest); |
| |
| #define StringCchGets __MINGW_NAME_AW(StringCchGets) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFE_INLINE_API StringCchGetsA(STRSAFE_LPSTR 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(STRSAFE_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; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFE_INLINE_API StringCbGetsA(STRSAFE_LPSTR pszDest,size_t cbDest); |
| STRSAFE_INLINE_API StringCbGetsW(STRSAFE_LPWSTR pszDest,size_t cbDest); |
| |
| #define StringCbGets __MINGW_NAME_AW(StringCbGets) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFE_INLINE_API StringCbGetsA(STRSAFE_LPSTR pszDest,size_t cbDest) { |
| HRESULT hr; |
| size_t cchDest; |
| cchDest = cbDest / sizeof(char); |
| if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER; |
| else hr = StringGetsExWorkerA(pszDest,cchDest,cbDest,NULL,NULL,0); |
| return hr; |
| } |
| |
| STRSAFE_INLINE_API StringCbGetsW(STRSAFE_LPWSTR pszDest,size_t cbDest) { |
| HRESULT hr; |
| size_t cchDest; |
| cchDest = cbDest / sizeof(wchar_t); |
| if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER; |
| else hr = StringGetsExWorkerW(pszDest,cchDest,cbDest,NULL,NULL,0); |
| return hr; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFE_INLINE_API StringCchGetsExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| STRSAFE_INLINE_API StringCchGetsExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags); |
| |
| #define StringCchGetsEx __MINGW_NAME_AW(StringCchGetsEx) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFE_INLINE_API StringCchGetsExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 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(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 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; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFE_INLINE_API StringCbGetsExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags); |
| STRSAFE_INLINE_API StringCbGetsExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags); |
| |
| #define StringCbGetsEx __MINGW_NAME_AW(StringCbGetsEx) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFE_INLINE_API StringCbGetsExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 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(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 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; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCchLengthA(STRSAFE_LPCSTR psz,size_t cchMax,size_t *pcchLength); |
| STRSAFEAPI StringCchLengthW(STRSAFE_LPCWSTR psz,size_t cchMax,size_t *pcchLength); |
| |
| #define StringCchLength __MINGW_NAME_AW(StringCchLength) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCchLengthA(STRSAFE_LPCSTR psz,size_t cchMax,size_t *pcchLength) { |
| HRESULT hr; |
| if(!psz || (cchMax > STRSAFE_MAX_CCH)) hr = STRSAFE_E_INVALID_PARAMETER; |
| else hr = StringLengthWorkerA(psz,cchMax,pcchLength); |
| if(FAILED(hr) && pcchLength) { |
| *pcchLength = 0; |
| } |
| return hr; |
| } |
| |
| STRSAFEAPI StringCchLengthW(STRSAFE_LPCWSTR psz,size_t cchMax,size_t *pcchLength) { |
| HRESULT hr; |
| if(!psz || (cchMax > STRSAFE_MAX_CCH)) hr = STRSAFE_E_INVALID_PARAMETER; |
| else hr = StringLengthWorkerW(psz,cchMax,pcchLength); |
| if(FAILED(hr) && pcchLength) { |
| *pcchLength = 0; |
| } |
| return hr; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| STRSAFEAPI StringCbLengthA(STRSAFE_LPCSTR psz,size_t cbMax,size_t *pcbLength); |
| STRSAFEAPI StringCbLengthW(STRSAFE_LPCWSTR psz,size_t cbMax,size_t *pcbLength); |
| |
| #define StringCbLength __MINGW_NAME_AW(StringCbLength) |
| |
| #ifndef __STRSAFE__NO_INLINE |
| STRSAFEAPI StringCbLengthA(STRSAFE_LPCSTR psz,size_t cbMax,size_t *pcbLength) { |
| HRESULT hr; |
| size_t cchMax; |
| size_t cchLength = 0; |
| cchMax = cbMax / sizeof(char); |
| if(!psz || (cchMax > STRSAFE_MAX_CCH)) hr = STRSAFE_E_INVALID_PARAMETER; |
| else hr = StringLengthWorkerA(psz,cchMax,&cchLength); |
| if(pcbLength) { |
| if(SUCCEEDED(hr)) { |
| *pcbLength = cchLength*sizeof(char); |
| } else { |
| *pcbLength = 0; |
| } |
| } |
| return hr; |
| } |
| |
| STRSAFEAPI StringCbLengthW(STRSAFE_LPCWSTR psz,size_t cbMax,size_t *pcbLength) { |
| HRESULT hr; |
| size_t cchMax; |
| size_t cchLength = 0; |
| cchMax = cbMax / sizeof(wchar_t); |
| if(!psz || (cchMax > STRSAFE_MAX_CCH)) hr = STRSAFE_E_INVALID_PARAMETER; |
| else hr = StringLengthWorkerW(psz,cchMax,&cchLength); |
| if(pcbLength) { |
| if(SUCCEEDED(hr)) { |
| *pcbLength = cchLength*sizeof(wchar_t); |
| } else { |
| *pcbLength = 0; |
| } |
| } |
| return hr; |
| } |
| |
| STRSAFEAPI StringCopyWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR 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; |
| } |
| |
| STRSAFEAPI StringCopyWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_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; |
| } |
| |
| STRSAFEAPI StringCopyExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr = S_OK; |
| STRSAFE_LPSTR pszDestEnd = pszDest; |
| size_t cchRemaining = 0; |
| if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER; |
| else { |
| if(dwFlags & STRSAFE_IGNORE_NULLS) { |
| if(!pszDest) { |
| if((cchDest!=0) || (cbDest!=0)) hr = STRSAFE_E_INVALID_PARAMETER; |
| } |
| if(!pszSrc) pszSrc = ""; |
| } |
| if(SUCCEEDED(hr)) { |
| if(cchDest==0) { |
| pszDestEnd = pszDest; |
| cchRemaining = 0; |
| if(*pszSrc!='\0') { |
| if(!pszDest) 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; |
| } |
| |
| STRSAFEAPI StringCopyExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr = S_OK; |
| STRSAFE_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) { |
| if((cchDest!=0) || (cbDest!=0)) hr = STRSAFE_E_INVALID_PARAMETER; |
| } |
| if(!pszSrc) pszSrc = L""; |
| } |
| if(SUCCEEDED(hr)) { |
| if(cchDest==0) { |
| pszDestEnd = pszDest; |
| cchRemaining = 0; |
| if(*pszSrc!=L'\0') { |
| if(!pszDest) 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; |
| } |
| |
| STRSAFEAPI StringCopyNWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR 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; |
| } |
| |
| STRSAFEAPI StringCopyNWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy) { |
| HRESULT hr = S_OK; |
| if(cchDest==0) hr = STRSAFE_E_INVALID_PARAMETER; |
| else { |
| while(cchDest && cchToCopy && (*pszSrc!=L'\0')) { |
| *pszDest++ = *pszSrc++; |
| cchDest--; |
| cchToCopy--; |
| } |
| if(cchDest==0) { |
| pszDest--; |
| hr = STRSAFE_E_INSUFFICIENT_BUFFER; |
| } |
| *pszDest= L'\0'; |
| } |
| return hr; |
| } |
| |
| STRSAFEAPI StringCopyNExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr = S_OK; |
| STRSAFE_LPSTR pszDestEnd = pszDest; |
| size_t cchRemaining = 0; |
| if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER; |
| else if(cchToCopy > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER; |
| else { |
| if(dwFlags & STRSAFE_IGNORE_NULLS) { |
| if(!pszDest) { |
| if((cchDest!=0) || (cbDest!=0)) hr = STRSAFE_E_INVALID_PARAMETER; |
| } |
| if(!pszSrc) pszSrc = ""; |
| } |
| if(SUCCEEDED(hr)) { |
| if(cchDest==0) { |
| pszDestEnd = pszDest; |
| cchRemaining = 0; |
| if((cchToCopy!=0) && (*pszSrc!='\0')) { |
| if(!pszDest) hr = STRSAFE_E_INVALID_PARAMETER; |
| else hr = STRSAFE_E_INSUFFICIENT_BUFFER; |
| } |
| } else { |
| pszDestEnd = pszDest; |
| cchRemaining = cchDest; |
| while(cchRemaining && cchToCopy && (*pszSrc!='\0')) { |
| *pszDestEnd++ = *pszSrc++; |
| cchRemaining--; |
| cchToCopy--; |
| } |
| 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; |
| } |
| |
| STRSAFEAPI StringCopyNExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr = S_OK; |
| STRSAFE_LPWSTR pszDestEnd = pszDest; |
| size_t cchRemaining = 0; |
| if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER; |
| else if(cchToCopy > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER; |
| else { |
| if(dwFlags & STRSAFE_IGNORE_NULLS) { |
| if(!pszDest) { |
| if((cchDest!=0) || (cbDest!=0)) hr = STRSAFE_E_INVALID_PARAMETER; |
| } |
| if(!pszSrc) pszSrc = L""; |
| } |
| if(SUCCEEDED(hr)) { |
| if(cchDest==0) { |
| pszDestEnd = pszDest; |
| cchRemaining = 0; |
| if((cchToCopy!=0) && (*pszSrc!=L'\0')) { |
| if(!pszDest) hr = STRSAFE_E_INVALID_PARAMETER; |
| else hr = STRSAFE_E_INSUFFICIENT_BUFFER; |
| } |
| } else { |
| pszDestEnd = pszDest; |
| cchRemaining = cchDest; |
| while(cchRemaining && cchToCopy && (*pszSrc!=L'\0')) { |
| *pszDestEnd++ = *pszSrc++; |
| cchRemaining--; |
| cchToCopy--; |
| } |
| 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; |
| } |
| |
| STRSAFEAPI StringCatWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc) { |
| HRESULT hr; |
| size_t cchDestLength; |
| hr = StringLengthWorkerA(pszDest,cchDest,&cchDestLength); |
| if(SUCCEEDED(hr)) hr = StringCopyWorkerA(pszDest + cchDestLength,cchDest - cchDestLength,pszSrc); |
| return hr; |
| } |
| |
| STRSAFEAPI StringCatWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc) { |
| HRESULT hr; |
| size_t cchDestLength; |
| hr = StringLengthWorkerW(pszDest,cchDest,&cchDestLength); |
| if(SUCCEEDED(hr)) hr = StringCopyWorkerW(pszDest + cchDestLength,cchDest - cchDestLength,pszSrc); |
| return hr; |
| } |
| |
| STRSAFEAPI StringCatExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr = S_OK; |
| STRSAFE_LPSTR pszDestEnd = pszDest; |
| size_t cchRemaining = 0; |
| if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER; |
| else { |
| size_t cchDestLength; |
| if(dwFlags & STRSAFE_IGNORE_NULLS) { |
| if(!pszDest) { |
| if((cchDest==0) && (cbDest==0)) cchDestLength = 0; |
| else hr = STRSAFE_E_INVALID_PARAMETER; |
| } else { |
| hr = StringLengthWorkerA(pszDest,cchDest,&cchDestLength); |
| if(SUCCEEDED(hr)) { |
| pszDestEnd = pszDest + cchDestLength; |
| cchRemaining = cchDest - cchDestLength; |
| } |
| } |
| if(!pszSrc) pszSrc = ""; |
| } else { |
| hr = StringLengthWorkerA(pszDest,cchDest,&cchDestLength); |
| if(SUCCEEDED(hr)) { |
| pszDestEnd = pszDest + cchDestLength; |
| cchRemaining = cchDest - cchDestLength; |
| } |
| } |
| if(SUCCEEDED(hr)) { |
| if(cchDest==0) { |
| if(*pszSrc!='\0') { |
| if(!pszDest) 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; |
| } |
| |
| STRSAFEAPI StringCatExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr = S_OK; |
| STRSAFE_LPWSTR pszDestEnd = pszDest; |
| size_t cchRemaining = 0; |
| if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER; |
| else { |
| size_t cchDestLength; |
| if(dwFlags & STRSAFE_IGNORE_NULLS) { |
| if(!pszDest) { |
| if((cchDest==0) && (cbDest==0)) cchDestLength = 0; |
| else hr = STRSAFE_E_INVALID_PARAMETER; |
| } else { |
| hr = StringLengthWorkerW(pszDest,cchDest,&cchDestLength); |
| if(SUCCEEDED(hr)) { |
| pszDestEnd = pszDest + cchDestLength; |
| cchRemaining = cchDest - cchDestLength; |
| } |
| } |
| if(!pszSrc) pszSrc = L""; |
| } else { |
| hr = StringLengthWorkerW(pszDest,cchDest,&cchDestLength); |
| if(SUCCEEDED(hr)) { |
| pszDestEnd = pszDest + cchDestLength; |
| cchRemaining = cchDest - cchDestLength; |
| } |
| } |
| if(SUCCEEDED(hr)) { |
| if(cchDest==0) { |
| if(*pszSrc!=L'\0') { |
| if(!pszDest) 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; |
| } |
| |
| STRSAFEAPI StringCatNWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend) { |
| HRESULT hr; |
| size_t cchDestLength; |
| hr = StringLengthWorkerA(pszDest,cchDest,&cchDestLength); |
| if(SUCCEEDED(hr)) hr = StringCopyNWorkerA(pszDest + cchDestLength,cchDest - cchDestLength,pszSrc,cchToAppend); |
| return hr; |
| } |
| |
| STRSAFEAPI StringCatNWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend) { |
| HRESULT hr; |
| size_t cchDestLength; |
| hr = StringLengthWorkerW(pszDest,cchDest,&cchDestLength); |
| if(SUCCEEDED(hr)) hr = StringCopyNWorkerW(pszDest + cchDestLength,cchDest - cchDestLength,pszSrc,cchToAppend); |
| return hr; |
| } |
| |
| STRSAFEAPI StringCatNExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr = S_OK; |
| STRSAFE_LPSTR pszDestEnd = pszDest; |
| size_t cchRemaining = 0; |
| size_t cchDestLength = 0; |
| if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER; |
| else if(cchToAppend > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER; |
| else { |
| if(dwFlags & STRSAFE_IGNORE_NULLS) { |
| if(!pszDest) { |
| if((cchDest==0) && (cbDest==0)) cchDestLength = 0; |
| else hr = STRSAFE_E_INVALID_PARAMETER; |
| } else { |
| hr = StringLengthWorkerA(pszDest,cchDest,&cchDestLength); |
| if(SUCCEEDED(hr)) { |
| pszDestEnd = pszDest + cchDestLength; |
| cchRemaining = cchDest - cchDestLength; |
| } |
| } |
| if(!pszSrc) pszSrc = ""; |
| } else { |
| hr = StringLengthWorkerA(pszDest,cchDest,&cchDestLength); |
| if(SUCCEEDED(hr)) { |
| pszDestEnd = pszDest + cchDestLength; |
| cchRemaining = cchDest - cchDestLength; |
| } |
| } |
| if(SUCCEEDED(hr)) { |
| if(cchDest==0) { |
| if((cchToAppend!=0) && (*pszSrc!='\0')) { |
| if(!pszDest) hr = STRSAFE_E_INVALID_PARAMETER; |
| else hr = STRSAFE_E_INSUFFICIENT_BUFFER; |
| } |
| } else hr = StringCopyNExWorkerA(pszDestEnd,cchRemaining,(cchRemaining*sizeof(char)) + (cbDest % sizeof(char)),pszSrc,cchToAppend,&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; |
| } |
| |
| STRSAFEAPI StringCatNExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr = S_OK; |
| STRSAFE_LPWSTR pszDestEnd = pszDest; |
| size_t cchRemaining = 0; |
| size_t cchDestLength = 0; |
| if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER; |
| else if(cchToAppend > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER; |
| else { |
| if(dwFlags & STRSAFE_IGNORE_NULLS) { |
| if(!pszDest) { |
| if((cchDest==0) && (cbDest==0)) cchDestLength = 0; |
| else hr = STRSAFE_E_INVALID_PARAMETER; |
| } else { |
| hr = StringLengthWorkerW(pszDest,cchDest,&cchDestLength); |
| if(SUCCEEDED(hr)) { |
| pszDestEnd = pszDest + cchDestLength; |
| cchRemaining = cchDest - cchDestLength; |
| } |
| } |
| if(!pszSrc) pszSrc = L""; |
| } else { |
| hr = StringLengthWorkerW(pszDest,cchDest,&cchDestLength); |
| if(SUCCEEDED(hr)) { |
| pszDestEnd = pszDest + cchDestLength; |
| cchRemaining = cchDest - cchDestLength; |
| } |
| } |
| if(SUCCEEDED(hr)) { |
| if(cchDest==0) { |
| if((cchToAppend!=0) && (*pszSrc!=L'\0')) { |
| if(!pszDest) 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,cchToAppend,&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; |
| } |
| |
| STRSAFEAPI StringVPrintfWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR 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; |
| } |
| |
| STRSAFEAPI StringVPrintfWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_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; |
| } |
| |
| STRSAFEAPI StringVPrintfExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList) { |
| HRESULT hr = S_OK; |
| STRSAFE_LPSTR pszDestEnd = pszDest; |
| size_t cchRemaining = 0; |
| if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER; |
| else { |
| if(dwFlags & STRSAFE_IGNORE_NULLS) { |
| if(!pszDest) { |
| if((cchDest!=0) || (cbDest!=0)) hr = STRSAFE_E_INVALID_PARAMETER; |
| } |
| if(!pszFormat) pszFormat = ""; |
| } |
| if(SUCCEEDED(hr)) { |
| if(cchDest==0) { |
| pszDestEnd = pszDest; |
| cchRemaining = 0; |
| if(*pszFormat!='\0') { |
| if(!pszDest) 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; |
| } |
| |
| STRSAFEAPI StringVPrintfExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList) { |
| HRESULT hr = S_OK; |
| STRSAFE_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) { |
| if((cchDest!=0) || (cbDest!=0)) hr = STRSAFE_E_INVALID_PARAMETER; |
| } |
| if(!pszFormat) pszFormat = L""; |
| } |
| if(SUCCEEDED(hr)) { |
| if(cchDest==0) { |
| pszDestEnd = pszDest; |
| cchRemaining = 0; |
| if(*pszFormat!=L'\0') { |
| if(!pszDest) 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; |
| } |
| |
| STRSAFEAPI StringLengthWorkerA(STRSAFE_LPCSTR psz,size_t cchMax,size_t *pcchLength) { |
| HRESULT hr = S_OK; |
| size_t cchMaxPrev = cchMax; |
| while(cchMax && (*psz!='\0')) { |
| psz++; |
| cchMax--; |
| } |
| if(cchMax==0) hr = STRSAFE_E_INVALID_PARAMETER; |
| if(pcchLength) { |
| if(SUCCEEDED(hr)) *pcchLength = cchMaxPrev - cchMax; |
| else *pcchLength = 0; |
| } |
| return hr; |
| } |
| |
| STRSAFEAPI StringLengthWorkerW(STRSAFE_LPCWSTR psz,size_t cchMax,size_t *pcchLength) { |
| HRESULT hr = S_OK; |
| size_t cchMaxPrev = cchMax; |
| while(cchMax && (*psz!=L'\0')) { |
| psz++; |
| cchMax--; |
| } |
| if(cchMax==0) hr = STRSAFE_E_INVALID_PARAMETER; |
| if(pcchLength) { |
| if(SUCCEEDED(hr)) *pcchLength = cchMaxPrev - cchMax; |
| else *pcchLength = 0; |
| } |
| return hr; |
| } |
| |
| STRSAFE_INLINE_API StringGetsExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr = S_OK; |
| STRSAFE_LPSTR pszDestEnd = pszDest; |
| size_t cchRemaining = 0; |
| |
| if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER; |
| else { |
| if(dwFlags & STRSAFE_IGNORE_NULLS) { |
| if(!pszDest) { |
| 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 { |
| pszDestEnd = pszDest; |
| cchRemaining = cchDest; |
| while(cchRemaining > 1) { |
| char ch; |
| int i = getc(stdin); |
| if(i==EOF) { |
| if(pszDestEnd==pszDest) hr = STRSAFE_E_END_OF_FILE; |
| break; |
| } |
| ch = (char)i; |
| if(ch=='\n') 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(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) { |
| HRESULT hr = S_OK; |
| STRSAFE_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) { |
| 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 { |
| pszDestEnd = pszDest; |
| cchRemaining = cchDest; |
| while(cchRemaining > 1) { |
| wchar_t ch = getwc(stdin); |
| if(ch==WEOF) { |
| if(pszDestEnd==pszDest) hr = STRSAFE_E_END_OF_FILE; |
| break; |
| } |
| if(ch==L'\n') 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; |
| } |
| #endif /* !__STRSAFE__NO_INLINE */ |
| |
| #define StringCopyWorkerA StringCopyWorkerA_instead_use_StringCchCopyA_or_StringCchCopyExA; |
| #define StringCopyWorkerW StringCopyWorkerW_instead_use_StringCchCopyW_or_StringCchCopyExW; |
| #define StringCopyExWorkerA StringCopyExWorkerA_instead_use_StringCchCopyA_or_StringCchCopyExA; |
| #define StringCopyExWorkerW StringCopyExWorkerW_instead_use_StringCchCopyW_or_StringCchCopyExW; |
| #define StringCatWorkerA StringCatWorkerA_instead_use_StringCchCatA_or_StringCchCatExA; |
| #define StringCatWorkerW StringCatWorkerW_instead_use_StringCchCatW_or_StringCchCatExW; |
| #define StringCatExWorkerA StringCatExWorkerA_instead_use_StringCchCatA_or_StringCchCatExA; |
| #define StringCatExWorkerW StringCatExWorkerW_instead_use_StringCchCatW_or_StringCchCatExW; |
| #define StringCatNWorkerA StringCatNWorkerA_instead_use_StringCchCatNA_or_StrincCbCatNA; |
| #define StringCatNWorkerW StringCatNWorkerW_instead_use_StringCchCatNW_or_StringCbCatNW; |
| #define StringCatNExWorkerA StringCatNExWorkerA_instead_use_StringCchCatNExA_or_StringCbCatNExA; |
| #define StringCatNExWorkerW StringCatNExWorkerW_instead_use_StringCchCatNExW_or_StringCbCatNExW; |
| #define StringVPrintfWorkerA StringVPrintfWorkerA_instead_use_StringCchVPrintfA_or_StringCchVPrintfExA; |
| #define StringVPrintfWorkerW StringVPrintfWorkerW_instead_use_StringCchVPrintfW_or_StringCchVPrintfExW; |
| #define StringVPrintfExWorkerA StringVPrintfExWorkerA_instead_use_StringCchVPrintfA_or_StringCchVPrintfExA; |
| #define StringVPrintfExWorkerW StringVPrintfExWorkerW_instead_use_StringCchVPrintfW_or_StringCchVPrintfExW; |
| #define StringLengthWorkerA StringLengthWorkerA_instead_use_StringCchLengthA_or_StringCbLengthA; |
| #define StringLengthWorkerW StringLengthWorkerW_instead_use_StringCchLengthW_or_StringCbLengthW; |
| #define StringGetsExWorkerA StringGetsExWorkerA_instead_use_StringCchGetsA_or_StringCbGetsA |
| #define StringGetsExWorkerW StringGetsExWorkerW_instead_use_StringCchGetsW_or_StringCbGetsW |
| |
| #ifndef STRSAFE_NO_DEPRECATE |
| |
| #undef strcpy |
| #define strcpy strcpy_instead_use_StringCbCopyA_or_StringCchCopyA; |
| |
| #undef wcscpy |
| #define wcscpy wcscpy_instead_use_StringCbCopyW_or_StringCchCopyW; |
| |
| #undef strcat |
| #define strcat strcat_instead_use_StringCbCatA_or_StringCchCatA; |
| |
| #undef wcscat |
| #define wcscat wcscat_instead_use_StringCbCatW_or_StringCchCatW; |
| |
| #undef sprintf |
| #define sprintf sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA; |
| |
| #undef swprintf |
| #define swprintf swprintf_instead_use_StringCbPrintfW_or_StringCchPrintfW; |
| |
| #undef vsprintf |
| #define vsprintf vsprintf_instead_use_StringCbVPrintfA_or_StringCchVPrintfA; |
| |
| #undef vswprintf |
| #define vswprintf vswprintf_instead_use_StringCbVPrintfW_or_StringCchVPrintfW; |
| |
| #undef _snprintf |
| #define _snprintf _snprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA; |
| |
| #undef _snwprintf |
| #define _snwprintf _snwprintf_instead_use_StringCbPrintfW_or_StringCchPrintfW; |
| |
| #undef _vsnprintf |
| #define _vsnprintf _vsnprintf_instead_use_StringCbVPrintfA_or_StringCchVPrintfA; |
| |
| #undef _vsnwprintf |
| #define _vsnwprintf _vsnwprintf_instead_use_StringCbVPrintfW_or_StringCchVPrintfW; |
| |
| #undef strcpyA |
| #define strcpyA strcpyA_instead_use_StringCbCopyA_or_StringCchCopyA; |
| |
| #undef strcpyW |
| #define strcpyW strcpyW_instead_use_StringCbCopyW_or_StringCchCopyW; |
| |
| #undef lstrcpy |
| #define lstrcpy lstrcpy_instead_use_StringCbCopy_or_StringCchCopy; |
| |
| #undef lstrcpyA |
| #define lstrcpyA lstrcpyA_instead_use_StringCbCopyA_or_StringCchCopyA; |
| |
| #undef lstrcpyW |
| #define lstrcpyW lstrcpyW_instead_use_StringCbCopyW_or_StringCchCopyW; |
| |
| #undef StrCpy |
| #define StrCpy StrCpy_instead_use_StringCbCopy_or_StringCchCopy; |
| |
| #undef StrCpyA |
| #define StrCpyA StrCpyA_instead_use_StringCbCopyA_or_StringCchCopyA; |
| |
| #undef StrCpyW |
| #define StrCpyW StrCpyW_instead_use_StringCbCopyW_or_StringCchCopyW; |
| |
| #undef _tcscpy |
| #define _tcscpy _tcscpy_instead_use_StringCbCopy_or_StringCchCopy; |
| |
| #undef _ftcscpy |
| #define _ftcscpy _ftcscpy_instead_use_StringCbCopy_or_StringCchCopy; |
| |
| #undef lstrcat |
| #define lstrcat lstrcat_instead_use_StringCbCat_or_StringCchCat; |
| |
| #undef lstrcatA |
| #define lstrcatA lstrcatA_instead_use_StringCbCatA_or_StringCchCatA; |
| |
| #undef lstrcatW |
| #define lstrcatW lstrcatW_instead_use_StringCbCatW_or_StringCchCatW; |
| |
| #undef StrCat |
| #define StrCat StrCat_instead_use_StringCbCat_or_StringCchCat; |
| |
| #undef StrCatA |
| #define StrCatA StrCatA_instead_use_StringCbCatA_or_StringCchCatA; |
| |
| #undef StrCatW |
| #define StrCatW StrCatW_instead_use_StringCbCatW_or_StringCchCatW; |
| |
| #undef StrNCat |
| #define StrNCat StrNCat_instead_use_StringCbCatN_or_StringCchCatN; |
| |
| #undef StrNCatA |
| #define StrNCatA StrNCatA_instead_use_StringCbCatNA_or_StringCchCatNA; |
| |
| #undef StrNCatW |
| #define StrNCatW StrNCatW_instead_use_StringCbCatNW_or_StringCchCatNW; |
| |
| #undef StrCatN |
| #define StrCatN StrCatN_instead_use_StringCbCatN_or_StringCchCatN; |
| |
| #undef StrCatNA |
| #define StrCatNA StrCatNA_instead_use_StringCbCatNA_or_StringCchCatNA; |
| |
| #undef StrCatNW |
| #define StrCatNW StrCatNW_instead_use_StringCbCatNW_or_StringCchCatNW; |
| |
| #undef _tcscat |
| #define _tcscat _tcscat_instead_use_StringCbCat_or_StringCchCat; |
| |
| #undef _ftcscat |
| #define _ftcscat _ftcscat_instead_use_StringCbCat_or_StringCchCat; |
| |
| #undef wsprintf |
| #define wsprintf wsprintf_instead_use_StringCbPrintf_or_StringCchPrintf; |
| |
| #undef wsprintfA |
| #define wsprintfA wsprintfA_instead_use_StringCbPrintfA_or_StringCchPrintfA; |
| |
| #undef wsprintfW |
| #define wsprintfW wsprintfW_instead_use_StringCbPrintfW_or_StringCchPrintfW; |
| |
| #undef wvsprintf |
| #define wvsprintf wvsprintf_instead_use_StringCbVPrintf_or_StringCchVPrintf; |
| |
| #undef wvsprintfA |
| #define wvsprintfA wvsprintfA_instead_use_StringCbVPrintfA_or_StringCchVPrintfA; |
| |
| #undef wvsprintfW |
| #define wvsprintfW wvsprintfW_instead_use_StringCbVPrintfW_or_StringCchVPrintfW; |
| |
| #undef _vstprintf |
| #define _vstprintf _vstprintf_instead_use_StringCbVPrintf_or_StringCchVPrintf; |
| |
| #undef _vsntprintf |
| #define _vsntprintf _vsntprintf_instead_use_StringCbVPrintf_or_StringCchVPrintf; |
| |
| #undef _stprintf |
| #define _stprintf _stprintf_instead_use_StringCbPrintf_or_StringCchPrintf; |
| |
| #undef _sntprintf |
| #define _sntprintf _sntprintf_instead_use_StringCbPrintf_or_StringCchPrintf; |
| |
| #undef _getts |
| #define _getts _getts_instead_use_StringCbGets_or_StringCchGets; |
| |
| #undef gets |
| #define gets _gets_instead_use_StringCbGetsA_or_StringCchGetsA; |
| |
| #undef _getws |
| #define _getws _getws_instead_use_StringCbGetsW_or_StringCchGetsW; |
| #endif |
| #endif |