ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

strsafe.h
Go to the documentation of this file.
00001 
00006 #ifndef _STRSAFE_H_INCLUDED_
00007 #define _STRSAFE_H_INCLUDED_
00008 
00009 #include <_mingw_unicode.h>
00010 #include <stdio.h>
00011 #include <string.h>
00012 #include <stdarg.h>
00013 #include <specstrings.h>
00014 
00015 #ifndef _SIZE_T_DEFINED
00016 #define _SIZE_T_DEFINED
00017 #undef size_t
00018 #ifdef _WIN64
00019 __MINGW_EXTENSION typedef unsigned __int64 size_t;
00020 #else
00021 typedef unsigned int size_t;
00022 #endif
00023 #endif
00024 
00025 #ifndef _SSIZE_T_DEFINED
00026 #define _SSIZE_T_DEFINED
00027 #undef ssize_t
00028 #ifdef _WIN64
00029 __MINGW_EXTENSION typedef __int64 ssize_t;
00030 #else
00031 typedef int ssize_t;
00032 #endif
00033 #endif
00034 
00035 #ifndef _WCHAR_T_DEFINED
00036 #define _WCHAR_T_DEFINED
00037 typedef unsigned short wchar_t;
00038 #endif
00039 
00040 #ifndef _HRESULT_DEFINED
00041 #define _HRESULT_DEFINED
00042 typedef long HRESULT;
00043 #endif
00044 
00045 #ifndef SUCCEEDED
00046 #define SUCCEEDED(hr) ((HRESULT)(hr) >= 0)
00047 #endif
00048 
00049 #ifndef FAILED
00050 #define FAILED(hr) ((HRESULT)(hr) < 0)
00051 #endif
00052 
00053 #ifndef S_OK
00054 #define S_OK ((HRESULT)0x00000000L)
00055 #endif
00056 
00057 #ifndef C_ASSERT
00058 #ifdef _MSC_VER
00059 # define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
00060 #else
00061 # define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1])
00062 #endif
00063 #endif /* C_ASSERT */
00064 
00065 #ifdef __cplusplus
00066 #define _STRSAFE_EXTERN_C extern "C"
00067 #else
00068 #define _STRSAFE_EXTERN_C extern
00069 #endif
00070 
00071 #ifndef WINAPI
00072 #define WINAPI __stdcall
00073 #endif
00074 
00075 #define STRSAFEAPI static __inline HRESULT WINAPI
00076 #define STRSAFE_INLINE_API __CRT_INLINE HRESULT WINAPI
00077 
00078 #define STRSAFE_MAX_CCH 2147483647
00079 
00080 #ifndef _NTSTRSAFE_H_INCLUDED_
00081 #define STRSAFE_IGNORE_NULLS 0x00000100
00082 #define STRSAFE_FILL_BEHIND_NULL 0x00000200
00083 #define STRSAFE_FILL_ON_FAILURE 0x00000400
00084 #define STRSAFE_NULL_ON_FAILURE 0x00000800
00085 #define STRSAFE_NO_TRUNCATION 0x00001000
00086 #define STRSAFE_IGNORE_NULL_UNICODE_STRINGS 0x00010000
00087 #define STRSAFE_UNICODE_STRING_DEST_NULL_TERMINATED 0x00020000
00088 
00089 #define STRSAFE_VALID_FLAGS (0x000000FF | STRSAFE_IGNORE_NULLS | STRSAFE_FILL_BEHIND_NULL | STRSAFE_FILL_ON_FAILURE | STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION)
00090 #define STRSAFE_UNICODE_STRING_VALID_FLAGS (STRSAFE_VALID_FLAGS | STRSAFE_IGNORE_NULL_UNICODE_STRINGS | STRSAFE_UNICODE_STRING_DEST_NULL_TERMINATED)
00091 
00092 #define STRSAFE_FILL_BYTE(x) ((STRSAFE_DWORD)(((x) & 0x000000FF) | STRSAFE_FILL_BEHIND_NULL))
00093 #define STRSAFE_FAILURE_BYTE(x) ((STRSAFE_DWORD)(((x) & 0x000000FF) | STRSAFE_FILL_ON_FAILURE))
00094 
00095 #define STRSAFE_GET_FILL_PATTERN(dwFlags) ((int)((dwFlags) & 0x000000FF))
00096 #endif
00097 
00098 #define STRSAFE_E_INSUFFICIENT_BUFFER ((HRESULT)0x8007007AL)
00099 #define STRSAFE_E_INVALID_PARAMETER ((HRESULT)0x80070057L)
00100 #define STRSAFE_E_END_OF_FILE ((HRESULT)0x80070026L)
00101 
00102 typedef char *STRSAFE_LPSTR;
00103 typedef const char *STRSAFE_LPCSTR;
00104 typedef wchar_t *STRSAFE_LPWSTR;
00105 typedef const wchar_t *STRSAFE_LPCWSTR;
00106 
00107 typedef ULONG STRSAFE_DWORD;
00108 
00109 STRSAFEAPI StringCopyWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc);
00110 STRSAFEAPI StringCopyWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc);
00111 STRSAFEAPI StringCopyExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00112 STRSAFEAPI StringCopyExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00113 STRSAFEAPI StringCopyNWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy);
00114 STRSAFEAPI StringCopyNWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy);
00115 STRSAFEAPI StringCopyNExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00116 STRSAFEAPI StringCopyNExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00117 STRSAFEAPI StringCatWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc);
00118 STRSAFEAPI StringCatWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc);
00119 STRSAFEAPI StringCatExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00120 STRSAFEAPI StringCatExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00121 STRSAFEAPI StringCatNWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend);
00122 STRSAFEAPI StringCatNWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend);
00123 STRSAFEAPI StringCatNExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00124 STRSAFEAPI StringCatNExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00125 STRSAFEAPI StringVPrintfWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,va_list argList);
00126 STRSAFEAPI StringVPrintfWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,va_list argList);
00127 STRSAFEAPI StringVPrintfExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList);
00128 STRSAFEAPI StringVPrintfExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList);
00129 STRSAFEAPI StringLengthWorkerA(STRSAFE_LPCSTR psz,size_t cchMax,size_t *pcchLength);
00130 STRSAFEAPI StringLengthWorkerW(STRSAFE_LPCWSTR psz,size_t cchMax,size_t *pcchLength);
00131 STRSAFE_INLINE_API StringGetsExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00132 STRSAFE_INLINE_API StringGetsExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00133 
00134 #define StringCchCopy __MINGW_NAME_AW(StringCchCopy)
00135 
00136 STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc);
00137 STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc);
00138 
00139 #ifndef __CRT__NO_INLINE
00140 STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc) {
00141   return (cchDest > STRSAFE_MAX_CCH ? STRSAFE_E_INVALID_PARAMETER : StringCopyWorkerA(pszDest,cchDest,pszSrc));
00142 }
00143 
00144 STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc) {
00145   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00146   return StringCopyWorkerW(pszDest,cchDest,pszSrc);
00147 }
00148 #endif /* !__CRT__NO_INLINE */
00149 
00150 #define StringCbCopy __MINGW_NAME_AW(StringCbCopy)
00151 
00152 STRSAFEAPI StringCbCopyA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc);
00153 STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc);
00154 
00155 #ifndef __CRT__NO_INLINE
00156 STRSAFEAPI StringCbCopyA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc) {
00157   if(cbDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00158   return StringCopyWorkerA(pszDest,cbDest,pszSrc);
00159 }
00160 
00161 STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc) {
00162   size_t cchDest = cbDest / sizeof(wchar_t);
00163   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00164   return StringCopyWorkerW(pszDest,cchDest,pszSrc);
00165 }
00166 #endif /* !__CRT__NO_INLINE */
00167 
00168 #define StringCchCopyEx __MINGW_NAME_AW(StringCchCopyEx)
00169 
00170 STRSAFEAPI StringCchCopyExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00171 STRSAFEAPI StringCchCopyExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00172 
00173 #ifndef __CRT__NO_INLINE
00174 STRSAFEAPI StringCchCopyExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
00175   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00176   return StringCopyExWorkerA(pszDest,cchDest,cchDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags);
00177 }
00178 
00179 STRSAFEAPI StringCchCopyExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
00180   size_t cbDest;
00181   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00182   cbDest = cchDest * sizeof(wchar_t);
00183   return StringCopyExWorkerW(pszDest,cchDest,cbDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags);
00184 }
00185 #endif /* !__CRT__NO_INLINE */
00186 
00187 #define StringCbCopyEx __MINGW_NAME_AW(StringCbCopyEx)
00188 
00189 STRSAFEAPI StringCbCopyExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
00190 STRSAFEAPI StringCbCopyExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
00191 
00192 #ifndef __CRT__NO_INLINE
00193 STRSAFEAPI StringCbCopyExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags) {
00194   HRESULT hr;
00195   size_t cchRemaining = 0;
00196   if(cbDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00197   hr = StringCopyExWorkerA(pszDest,cbDest,cbDest,pszSrc,ppszDestEnd,&cchRemaining,dwFlags);
00198   if(SUCCEEDED(hr) || hr == STRSAFE_E_INSUFFICIENT_BUFFER) {
00199     if(pcbRemaining)
00200       *pcbRemaining = (cchRemaining*sizeof(char)) + (cbDest % sizeof(char));
00201   }
00202   return hr;
00203 }
00204 
00205 STRSAFEAPI StringCbCopyExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags) {
00206   HRESULT hr;
00207   size_t cchDest = cbDest / sizeof(wchar_t);
00208   size_t cchRemaining = 0;
00209 
00210   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00211   hr = StringCopyExWorkerW(pszDest,cchDest,cbDest,pszSrc,ppszDestEnd,&cchRemaining,dwFlags);
00212   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
00213     if(pcbRemaining)
00214       *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
00215   }
00216   return hr;
00217 }
00218 #endif /* !__CRT__NO_INLINE */
00219 
00220 STRSAFEAPI StringCchCopyNA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy);
00221 STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy);
00222 #define StringCchCopyN __MINGW_NAME_AW(StringCchCopyN)
00223 
00224 #ifndef __CRT__NO_INLINE
00225 STRSAFEAPI StringCchCopyNA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy) {
00226   if(cchDest > STRSAFE_MAX_CCH || cchToCopy > STRSAFE_MAX_CCH)
00227     return STRSAFE_E_INVALID_PARAMETER;
00228   return StringCopyNWorkerA(pszDest,cchDest,pszSrc,cchToCopy);
00229 }
00230 
00231 STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy) {
00232   if(cchDest > STRSAFE_MAX_CCH || cchToCopy > STRSAFE_MAX_CCH)
00233     return STRSAFE_E_INVALID_PARAMETER;
00234   return StringCopyNWorkerW(pszDest,cchDest,pszSrc,cchToCopy);
00235 }
00236 #endif /* !__CRT__NO_INLINE */
00237 
00238 STRSAFEAPI StringCbCopyNA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToCopy);
00239 STRSAFEAPI StringCbCopyNW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToCopy);
00240 
00241 #define StringCbCopyN __MINGW_NAME_AW(StringCbCopyN)
00242 
00243 #ifndef __CRT__NO_INLINE
00244 STRSAFEAPI StringCbCopyNA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToCopy) {
00245   if(cbDest > STRSAFE_MAX_CCH || cbToCopy > STRSAFE_MAX_CCH)
00246     return STRSAFE_E_INVALID_PARAMETER;
00247   return StringCopyNWorkerA(pszDest,cbDest,pszSrc,cbToCopy);
00248 }
00249 
00250 STRSAFEAPI StringCbCopyNW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToCopy) {
00251   size_t cchDest  = cbDest / sizeof(wchar_t);
00252   size_t cchToCopy = cbToCopy / sizeof(wchar_t);
00253   if(cchDest > STRSAFE_MAX_CCH || cchToCopy > STRSAFE_MAX_CCH)
00254     return STRSAFE_E_INVALID_PARAMETER;
00255   return StringCopyNWorkerW(pszDest,cchDest,pszSrc,cchToCopy);
00256 }
00257 #endif /* !__CRT__NO_INLINE */
00258 
00259 STRSAFEAPI StringCchCopyNExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00260 STRSAFEAPI StringCchCopyNExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00261 
00262 #define StringCchCopyNEx __MINGW_NAME_AW(StringCchCopyNEx)
00263 
00264 #ifndef __CRT__NO_INLINE
00265 STRSAFEAPI StringCchCopyNExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
00266   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00267   return StringCopyNExWorkerA(pszDest,cchDest,cchDest,pszSrc,cchToCopy,ppszDestEnd,pcchRemaining,dwFlags);
00268 }
00269 
00270 STRSAFEAPI StringCchCopyNExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
00271   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00272   return StringCopyNExWorkerW(pszDest,cchDest,cchDest * sizeof(wchar_t),pszSrc,cchToCopy,ppszDestEnd,pcchRemaining,dwFlags);
00273 }
00274 #endif /* !__CRT__NO_INLINE */
00275 
00276 STRSAFEAPI StringCbCopyNExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
00277 STRSAFEAPI StringCbCopyNExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
00278 
00279 #define StringCbCopyNEx __MINGW_NAME_AW(StringCbCopyNEx)
00280 
00281 #ifndef __CRT__NO_INLINE
00282 STRSAFEAPI StringCbCopyNExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags) {
00283   HRESULT hr;
00284   size_t cchRemaining = 0;
00285   if(cbDest > STRSAFE_MAX_CCH)
00286     hr = STRSAFE_E_INVALID_PARAMETER;
00287   else
00288     hr = StringCopyNExWorkerA(pszDest,cbDest,cbDest,pszSrc,cbToCopy,ppszDestEnd,&cchRemaining,dwFlags);
00289   if((SUCCEEDED(hr) || hr == STRSAFE_E_INSUFFICIENT_BUFFER) && pcbRemaining)
00290     *pcbRemaining = cchRemaining;
00291   return hr;
00292 }
00293 
00294 STRSAFEAPI StringCbCopyNExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags) {
00295   HRESULT hr;
00296   size_t cchDest;
00297   size_t cchToCopy;
00298   size_t cchRemaining = 0;
00299   cchDest = cbDest / sizeof(wchar_t);
00300   cchToCopy = cbToCopy / sizeof(wchar_t);
00301   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00302   else hr = StringCopyNExWorkerW(pszDest,cchDest,cbDest,pszSrc,cchToCopy,ppszDestEnd,&cchRemaining,dwFlags);
00303   if((SUCCEEDED(hr) || hr == STRSAFE_E_INSUFFICIENT_BUFFER) && pcbRemaining)
00304     *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
00305   return hr;
00306 }
00307 #endif /* !__CRT__NO_INLINE */
00308 
00309 STRSAFEAPI StringCchCatA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc);
00310 STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc);
00311 
00312 #define StringCchCat __MINGW_NAME_AW(StringCchCat)
00313 
00314 #ifndef __CRT__NO_INLINE
00315 STRSAFEAPI StringCchCatA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc) {
00316   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00317   return StringCatWorkerA(pszDest,cchDest,pszSrc);
00318 }
00319 
00320 STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc) {
00321   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00322   return StringCatWorkerW(pszDest,cchDest,pszSrc);
00323 }
00324 #endif /* !__CRT__NO_INLINE */
00325 
00326 STRSAFEAPI StringCbCatA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc);
00327 STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc);
00328 
00329 #define StringCbCat __MINGW_NAME_AW(StringCbCat)
00330 
00331 #ifndef __CRT__NO_INLINE
00332 STRSAFEAPI StringCbCatA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc) {
00333   if(cbDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00334   return StringCatWorkerA(pszDest,cbDest,pszSrc);
00335 }
00336 
00337 STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc) {
00338   size_t cchDest = cbDest / sizeof(wchar_t);
00339   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00340   return StringCatWorkerW(pszDest,cchDest,pszSrc);
00341 }
00342 #endif /* !__CRT__NO_INLINE */
00343 
00344 STRSAFEAPI StringCchCatExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00345 STRSAFEAPI StringCchCatExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00346 
00347 #define StringCchCatEx __MINGW_NAME_AW(StringCchCatEx)
00348 
00349 #ifndef __CRT__NO_INLINE
00350 STRSAFEAPI StringCchCatExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
00351   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00352   return StringCatExWorkerA(pszDest,cchDest,cchDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags);
00353 }
00354 
00355 STRSAFEAPI StringCchCatExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
00356   size_t cbDest = cchDest*sizeof(wchar_t);
00357   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00358   return StringCatExWorkerW(pszDest,cchDest,cbDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags);
00359 }
00360 #endif /* !__CRT__NO_INLINE */
00361 
00362 STRSAFEAPI StringCbCatExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
00363 STRSAFEAPI StringCbCatExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
00364 
00365 #define StringCbCatEx __MINGW_NAME_AW(StringCbCatEx)
00366 
00367 #ifndef __CRT__NO_INLINE
00368 STRSAFEAPI StringCbCatExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags) {
00369   HRESULT hr;
00370   size_t cchRemaining = 0;
00371   if(cbDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00372   else hr = StringCatExWorkerA(pszDest,cbDest,cbDest,pszSrc,ppszDestEnd,&cchRemaining,dwFlags);
00373   if((SUCCEEDED(hr) || hr == STRSAFE_E_INSUFFICIENT_BUFFER) && pcbRemaining)
00374     *pcbRemaining = (cchRemaining*sizeof(char)) + (cbDest % sizeof(char));
00375   return hr;
00376 }
00377 
00378 STRSAFEAPI StringCbCatExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags) {
00379   HRESULT hr;
00380   size_t cchDest = cbDest / sizeof(wchar_t);
00381   size_t cchRemaining = 0;
00382 
00383   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00384   else hr = StringCatExWorkerW(pszDest,cchDest,cbDest,pszSrc,ppszDestEnd,&cchRemaining,dwFlags);
00385   if((SUCCEEDED(hr) || hr == STRSAFE_E_INSUFFICIENT_BUFFER) && pcbRemaining)
00386     *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
00387   return hr;
00388 }
00389 #endif /* !__CRT__NO_INLINE */
00390 
00391 STRSAFEAPI StringCchCatNA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend);
00392 STRSAFEAPI StringCchCatNW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend);
00393 
00394 #define StringCchCatN __MINGW_NAME_AW(StringCchCatN)
00395 
00396 #ifndef __CRT__NO_INLINE
00397 STRSAFEAPI StringCchCatNA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend) {
00398   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00399   return StringCatNWorkerA(pszDest,cchDest,pszSrc,cchToAppend);
00400 }
00401 
00402 STRSAFEAPI StringCchCatNW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend) {
00403   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00404   return StringCatNWorkerW(pszDest,cchDest,pszSrc,cchToAppend);
00405 }
00406 #endif /* !__CRT__NO_INLINE */
00407 
00408 STRSAFEAPI StringCbCatNA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToAppend);
00409 STRSAFEAPI StringCbCatNW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToAppend);
00410 
00411 #define StringCbCatN __MINGW_NAME_AW(StringCbCatN)
00412 
00413 #ifndef __CRT__NO_INLINE
00414 STRSAFEAPI StringCbCatNA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToAppend) {
00415   if(cbDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00416   return StringCatNWorkerA(pszDest,cbDest,pszSrc,cbToAppend);
00417 }
00418 
00419 STRSAFEAPI StringCbCatNW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToAppend) {
00420   size_t cchDest = cbDest / sizeof(wchar_t);
00421   size_t cchToAppend = cbToAppend / sizeof(wchar_t);
00422 
00423   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00424   return StringCatNWorkerW(pszDest,cchDest,pszSrc,cchToAppend);
00425 }
00426 #endif /* !__CRT__NO_INLINE */
00427 
00428 STRSAFEAPI StringCchCatNExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00429 STRSAFEAPI StringCchCatNExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00430 
00431 #define StringCchCatNEx __MINGW_NAME_AW(StringCchCatNEx)
00432 
00433 #ifndef __CRT__NO_INLINE
00434 STRSAFEAPI StringCchCatNExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
00435   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00436   return StringCatNExWorkerA(pszDest,cchDest,cchDest,pszSrc,cchToAppend,ppszDestEnd,pcchRemaining,dwFlags);
00437 }
00438 
00439 STRSAFEAPI StringCchCatNExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
00440   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00441   return StringCatNExWorkerW(pszDest,cchDest,(cchDest*sizeof(wchar_t)),pszSrc,cchToAppend,ppszDestEnd,pcchRemaining,dwFlags);
00442 }
00443 #endif
00444 
00445 STRSAFEAPI StringCbCatNExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
00446 STRSAFEAPI StringCbCatNExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
00447 
00448 #define StringCbCatNEx __MINGW_NAME_AW(StringCbCatNEx)
00449 
00450 #ifndef __CRT__NO_INLINE
00451 STRSAFEAPI StringCbCatNExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags) {
00452   HRESULT hr;
00453   size_t cchRemaining = 0;
00454   if(cbDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00455   else hr = StringCatNExWorkerA(pszDest,cbDest,cbDest,pszSrc,cbToAppend,ppszDestEnd,&cchRemaining,dwFlags);
00456   if((SUCCEEDED(hr) || hr == STRSAFE_E_INSUFFICIENT_BUFFER) && pcbRemaining)
00457     *pcbRemaining = (cchRemaining*sizeof(char)) + (cbDest % sizeof(char));
00458   return hr;
00459 }
00460 
00461 STRSAFEAPI StringCbCatNExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags) {
00462   HRESULT hr;
00463   size_t cchDest = cbDest / sizeof(wchar_t);
00464   size_t cchToAppend = cbToAppend / sizeof(wchar_t);
00465   size_t cchRemaining = 0;
00466   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00467   else hr = StringCatNExWorkerW(pszDest,cchDest,cbDest,pszSrc,cchToAppend,ppszDestEnd,&cchRemaining,dwFlags);
00468   if((SUCCEEDED(hr) || hr == STRSAFE_E_INSUFFICIENT_BUFFER) && pcbRemaining)
00469     *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
00470   return hr;
00471 }
00472 #endif /* !__CRT__NO_INLINE */
00473 
00474 STRSAFEAPI StringCchVPrintfA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,va_list argList);
00475 STRSAFEAPI StringCchVPrintfW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,va_list argList);
00476 
00477 #define StringCchVPrintf __MINGW_NAME_AW(StringCchVPrintf)
00478 
00479 #ifndef __CRT__NO_INLINE
00480 STRSAFEAPI StringCchVPrintfA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,va_list argList) {
00481   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00482   return StringVPrintfWorkerA(pszDest,cchDest,pszFormat,argList);
00483 }
00484 
00485 STRSAFEAPI StringCchVPrintfW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,va_list argList) {
00486   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00487   return StringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList);
00488 }
00489 #endif /* !__CRT__NO_INLINE */
00490 
00491 STRSAFEAPI StringCbVPrintfA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszFormat,va_list argList);
00492 STRSAFEAPI StringCbVPrintfW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszFormat,va_list argList);
00493 
00494 #define StringCbVPrintf __MINGW_NAME_AW(StringCbVPrintf)
00495 
00496 #ifndef __CRT__NO_INLINE
00497 STRSAFEAPI StringCbVPrintfA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszFormat,va_list argList) {
00498   if(cbDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00499   return StringVPrintfWorkerA(pszDest,cbDest,pszFormat,argList);
00500 }
00501 
00502 STRSAFEAPI StringCbVPrintfW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszFormat,va_list argList) {
00503   size_t cchDest = cbDest / sizeof(wchar_t);
00504   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00505   return StringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList);
00506 }
00507 #endif /* !__CRT__NO_INLINE */
00508 
00509 STRSAFEAPI StringCchPrintfA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,...);
00510 STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,...);
00511 
00512 #define StringCchPrintf __MINGW_NAME_AW(StringCchPrintf)
00513 
00514 #ifndef __CRT__NO_INLINE
00515 STRSAFEAPI StringCchPrintfA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,...) {
00516   HRESULT hr;
00517   va_list argList;
00518   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00519   va_start(argList,pszFormat);
00520   hr = StringVPrintfWorkerA(pszDest,cchDest,pszFormat,argList);
00521   va_end(argList);
00522   return hr;
00523 }
00524 
00525 STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,...) {
00526   HRESULT hr;
00527   va_list argList;
00528   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00529   va_start(argList,pszFormat);
00530   hr = StringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList);
00531   va_end(argList);
00532   return hr;
00533 }
00534 #endif /* !__CRT__NO_INLINE */
00535 
00536 STRSAFEAPI StringCbPrintfA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszFormat,...);
00537 STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszFormat,...);
00538 
00539 #define StringCbPrintf __MINGW_NAME_AW(StringCbPrintf)
00540 
00541 #ifndef __CRT__NO_INLINE
00542 STRSAFEAPI StringCbPrintfA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszFormat,...) {
00543   HRESULT hr;
00544   va_list argList;
00545   if(cbDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00546   va_start(argList,pszFormat);
00547   hr = StringVPrintfWorkerA(pszDest,cbDest,pszFormat,argList);
00548   va_end(argList);
00549   return hr;
00550 }
00551 
00552 STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszFormat,...) {
00553   HRESULT hr;
00554   va_list argList;
00555   size_t cchDest = cbDest / sizeof(wchar_t);
00556   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00557   va_start(argList,pszFormat);
00558   hr = StringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList);
00559   va_end(argList);
00560   return hr;
00561 }
00562 #endif /* !__CRT__NO_INLINE */
00563 
00564 STRSAFEAPI StringCchPrintfExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,...);
00565 STRSAFEAPI StringCchPrintfExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,...);
00566 
00567 #define StringCchPrintfEx __MINGW_NAME_AW(StringCchPrintfEx)
00568 
00569 #ifndef __CRT__NO_INLINE
00570 STRSAFEAPI StringCchPrintfExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,...) {
00571   HRESULT hr;
00572   va_list argList;
00573   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00574   va_start(argList,pszFormat);
00575   hr = StringVPrintfExWorkerA(pszDest,cchDest,cchDest,ppszDestEnd,pcchRemaining,dwFlags,pszFormat,argList);
00576   va_end(argList);
00577   return hr;
00578 }
00579 
00580 STRSAFEAPI StringCchPrintfExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,...) {
00581   HRESULT hr;
00582   size_t cbDest = cchDest * sizeof(wchar_t);
00583   va_list argList;
00584   if(cchDest > STRSAFE_MAX_CCH) return STRSAFE_E_INVALID_PARAMETER;
00585   va_start(argList,pszFormat);
00586   hr = StringVPrintfExWorkerW(pszDest,cchDest,cbDest,ppszDestEnd,pcchRemaining,dwFlags,pszFormat,argList);
00587   va_end(argList);
00588   return hr;
00589 }
00590 #endif /* !__CRT__NO_INLINE */
00591 
00592 STRSAFEAPI StringCbPrintfExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,...);
00593 STRSAFEAPI StringCbPrintfExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,...);
00594 
00595 #define StringCbPrintfEx __MINGW_NAME_AW(StringCbPrintfEx)
00596 
00597 #ifndef __CRT__NO_INLINE
00598 STRSAFEAPI StringCbPrintfExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,...) {
00599   HRESULT hr;
00600   size_t cchDest;
00601   size_t cchRemaining = 0;
00602   cchDest = cbDest / sizeof(char);
00603   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00604   else {
00605     va_list argList;
00606     va_start(argList,pszFormat);
00607     hr = StringVPrintfExWorkerA(pszDest,cchDest,cbDest,ppszDestEnd,&cchRemaining,dwFlags,pszFormat,argList);
00608     va_end(argList);
00609   }
00610   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
00611     if(pcbRemaining) {
00612       *pcbRemaining = (cchRemaining*sizeof(char)) + (cbDest % sizeof(char));
00613     }
00614   }
00615   return hr;
00616 }
00617 
00618 STRSAFEAPI StringCbPrintfExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,...) {
00619   HRESULT hr;
00620   size_t cchDest;
00621   size_t cchRemaining = 0;
00622   cchDest = cbDest / sizeof(wchar_t);
00623   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00624   else {
00625     va_list argList;
00626     va_start(argList,pszFormat);
00627     hr = StringVPrintfExWorkerW(pszDest,cchDest,cbDest,ppszDestEnd,&cchRemaining,dwFlags,pszFormat,argList);
00628     va_end(argList);
00629   }
00630   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
00631     if(pcbRemaining) {
00632       *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
00633     }
00634   }
00635   return hr;
00636 }
00637 #endif /* !__CRT__NO_INLINE */
00638 
00639 STRSAFEAPI StringCchVPrintfExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList);
00640 STRSAFEAPI StringCchVPrintfExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList);
00641 
00642 #define StringCchVPrintfEx __MINGW_NAME_AW(StringCchVPrintfEx)
00643 
00644 #ifndef __CRT__NO_INLINE
00645 STRSAFEAPI StringCchVPrintfExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList) {
00646   HRESULT hr;
00647   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00648   else {
00649     size_t cbDest;
00650     cbDest = cchDest*sizeof(char);
00651     hr = StringVPrintfExWorkerA(pszDest,cchDest,cbDest,ppszDestEnd,pcchRemaining,dwFlags,pszFormat,argList);
00652   }
00653   return hr;
00654 }
00655 
00656 STRSAFEAPI StringCchVPrintfExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList) {
00657   HRESULT hr;
00658   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00659   else {
00660     size_t cbDest;
00661     cbDest = cchDest*sizeof(wchar_t);
00662     hr = StringVPrintfExWorkerW(pszDest,cchDest,cbDest,ppszDestEnd,pcchRemaining,dwFlags,pszFormat,argList);
00663   }
00664   return hr;
00665 }
00666 #endif /* !__CRT__NO_INLINE */
00667 
00668 STRSAFEAPI StringCbVPrintfExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList);
00669 STRSAFEAPI StringCbVPrintfExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList);
00670 
00671 #define StringCbVPrintfEx __MINGW_NAME_AW(StringCbVPrintfEx)
00672 
00673 #ifndef __CRT__NO_INLINE
00674 STRSAFEAPI StringCbVPrintfExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList) {
00675   HRESULT hr;
00676   size_t cchDest;
00677   size_t cchRemaining = 0;
00678   cchDest = cbDest / sizeof(char);
00679   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00680   else hr = StringVPrintfExWorkerA(pszDest,cchDest,cbDest,ppszDestEnd,&cchRemaining,dwFlags,pszFormat,argList);
00681   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
00682     if(pcbRemaining) {
00683       *pcbRemaining = (cchRemaining*sizeof(char)) + (cbDest % sizeof(char));
00684     }
00685   }
00686   return hr;
00687 }
00688 
00689 STRSAFEAPI StringCbVPrintfExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList) {
00690   HRESULT hr;
00691   size_t cchDest;
00692   size_t cchRemaining = 0;
00693   cchDest = cbDest / sizeof(wchar_t);
00694   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00695   else hr = StringVPrintfExWorkerW(pszDest,cchDest,cbDest,ppszDestEnd,&cchRemaining,dwFlags,pszFormat,argList);
00696   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
00697     if(pcbRemaining) {
00698       *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
00699     }
00700   }
00701   return hr;
00702 }
00703 #endif /* !__CRT__NO_INLINE */
00704 
00705 STRSAFE_INLINE_API StringCchGetsA(STRSAFE_LPSTR pszDest,size_t cchDest);
00706 STRSAFE_INLINE_API StringCchGetsW(STRSAFE_LPWSTR pszDest,size_t cchDest);
00707 
00708 #define StringCchGets __MINGW_NAME_AW(StringCchGets)
00709 
00710 #ifndef __CRT__NO_INLINE
00711 STRSAFE_INLINE_API StringCchGetsA(STRSAFE_LPSTR pszDest,size_t cchDest) {
00712   HRESULT hr;
00713   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00714   else {
00715     size_t cbDest;
00716     cbDest = cchDest*sizeof(char);
00717     hr = StringGetsExWorkerA(pszDest,cchDest,cbDest,NULL,NULL,0);
00718   }
00719   return hr;
00720 }
00721 
00722 STRSAFE_INLINE_API StringCchGetsW(STRSAFE_LPWSTR pszDest,size_t cchDest) {
00723   HRESULT hr;
00724   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00725   else {
00726     size_t cbDest;
00727     cbDest = cchDest*sizeof(wchar_t);
00728     hr = StringGetsExWorkerW(pszDest,cchDest,cbDest,NULL,NULL,0);
00729   }
00730   return hr;
00731 }
00732 #endif /* !__CRT__NO_INLINE */
00733 
00734 STRSAFE_INLINE_API StringCbGetsA(STRSAFE_LPSTR pszDest,size_t cbDest);
00735 STRSAFE_INLINE_API StringCbGetsW(STRSAFE_LPWSTR pszDest,size_t cbDest);
00736 
00737 #define StringCbGets __MINGW_NAME_AW(StringCbGets)
00738 
00739 #ifndef __CRT__NO_INLINE
00740 STRSAFE_INLINE_API StringCbGetsA(STRSAFE_LPSTR pszDest,size_t cbDest) {
00741   HRESULT hr;
00742   size_t cchDest;
00743   cchDest = cbDest / sizeof(char);
00744   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00745   else hr = StringGetsExWorkerA(pszDest,cchDest,cbDest,NULL,NULL,0);
00746   return hr;
00747 }
00748 
00749 STRSAFE_INLINE_API StringCbGetsW(STRSAFE_LPWSTR pszDest,size_t cbDest) {
00750   HRESULT hr;
00751   size_t cchDest;
00752   cchDest = cbDest / sizeof(wchar_t);
00753   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00754   else hr = StringGetsExWorkerW(pszDest,cchDest,cbDest,NULL,NULL,0);
00755   return hr;
00756 }
00757 #endif /* !__CRT__NO_INLINE */
00758 
00759 STRSAFE_INLINE_API StringCchGetsExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00760 STRSAFE_INLINE_API StringCchGetsExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
00761 
00762 #define StringCchGetsEx __MINGW_NAME_AW(StringCchGetsEx)
00763 
00764 #ifndef __CRT__NO_INLINE
00765 STRSAFE_INLINE_API StringCchGetsExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
00766   HRESULT hr;
00767   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00768   else {
00769     size_t cbDest;
00770     cbDest = cchDest*sizeof(char);
00771     hr = StringGetsExWorkerA(pszDest,cchDest,cbDest,ppszDestEnd,pcchRemaining,dwFlags);
00772   }
00773   return hr;
00774 }
00775 
00776 STRSAFE_INLINE_API StringCchGetsExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
00777   HRESULT hr;
00778   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00779   else {
00780     size_t cbDest;
00781     cbDest = cchDest*sizeof(wchar_t);
00782     hr = StringGetsExWorkerW(pszDest,cchDest,cbDest,ppszDestEnd,pcchRemaining,dwFlags);
00783   }
00784   return hr;
00785 }
00786 #endif /* !__CRT__NO_INLINE */
00787 
00788 STRSAFE_INLINE_API StringCbGetsExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
00789 STRSAFE_INLINE_API StringCbGetsExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
00790 
00791 #define StringCbGetsEx __MINGW_NAME_AW(StringCbGetsEx)
00792 
00793 #ifndef __CRT__NO_INLINE
00794 STRSAFE_INLINE_API StringCbGetsExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags) {
00795   HRESULT hr;
00796   size_t cchDest;
00797   size_t cchRemaining = 0;
00798   cchDest = cbDest / sizeof(char);
00799   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00800   else hr = StringGetsExWorkerA(pszDest,cchDest,cbDest,ppszDestEnd,&cchRemaining,dwFlags);
00801   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER) || (hr==STRSAFE_E_END_OF_FILE)) {
00802     if(pcbRemaining) *pcbRemaining = (cchRemaining*sizeof(char)) + (cbDest % sizeof(char));
00803   }
00804   return hr;
00805 }
00806 
00807 STRSAFE_INLINE_API StringCbGetsExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags) {
00808   HRESULT hr;
00809   size_t cchDest;
00810   size_t cchRemaining = 0;
00811   cchDest = cbDest / sizeof(wchar_t);
00812   if(cchDest > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
00813   else hr = StringGetsExWorkerW(pszDest,cchDest,cbDest,ppszDestEnd,&cchRemaining,dwFlags);
00814   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER) || (hr==STRSAFE_E_END_OF_FILE)) {
00815     if(pcbRemaining) *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
00816   }
00817   return hr;
00818 }
00819 #endif /* !__CRT__NO_INLINE */
00820 
00821 STRSAFEAPI StringCchLengthA(STRSAFE_LPCSTR psz,size_t cchMax,size_t *pcchLength);
00822 STRSAFEAPI StringCchLengthW(STRSAFE_LPCWSTR psz,size_t cchMax,size_t *pcchLength);
00823 
00824 #define StringCchLength __MINGW_NAME_AW(StringCchLength)
00825 
00826 #ifndef __CRT__NO_INLINE
00827 STRSAFEAPI StringCchLengthA(STRSAFE_LPCSTR psz,size_t cchMax,size_t *pcchLength) {
00828   HRESULT hr;
00829   if(!psz || (cchMax > STRSAFE_MAX_CCH)) hr = STRSAFE_E_INVALID_PARAMETER;
00830   else hr = StringLengthWorkerA(psz,cchMax,pcchLength);
00831   if(FAILED(hr) && pcchLength) {
00832     *pcchLength = 0;
00833   }
00834   return hr;
00835 }
00836 
00837 STRSAFEAPI StringCchLengthW(STRSAFE_LPCWSTR psz,size_t cchMax,size_t *pcchLength) {
00838   HRESULT hr;
00839   if(!psz || (cchMax > STRSAFE_MAX_CCH)) hr = STRSAFE_E_INVALID_PARAMETER;
00840   else hr = StringLengthWorkerW(psz,cchMax,pcchLength);
00841   if(FAILED(hr) && pcchLength) {
00842     *pcchLength = 0;
00843   }
00844   return hr;
00845 }
00846 #endif /* !__CRT__NO_INLINE */
00847 
00848 STRSAFEAPI StringCbLengthA(STRSAFE_LPCSTR psz,size_t cbMax,size_t *pcbLength);
00849 STRSAFEAPI StringCbLengthW(STRSAFE_LPCWSTR psz,size_t cbMax,size_t *pcbLength);
00850 
00851 #define StringCbLength __MINGW_NAME_AW(StringCbLength)
00852 
00853 #ifndef __CRT__NO_INLINE
00854 STRSAFEAPI StringCbLengthA(STRSAFE_LPCSTR psz,size_t cbMax,size_t *pcbLength) {
00855   HRESULT hr;
00856   size_t cchMax;
00857   size_t cchLength = 0;
00858   cchMax = cbMax / sizeof(char);
00859   if(!psz || (cchMax > STRSAFE_MAX_CCH)) hr = STRSAFE_E_INVALID_PARAMETER;
00860   else hr = StringLengthWorkerA(psz,cchMax,&cchLength);
00861   if(pcbLength) {
00862     if(SUCCEEDED(hr)) {
00863       *pcbLength = cchLength*sizeof(char);
00864     } else {
00865       *pcbLength = 0;
00866     }
00867   }
00868   return hr;
00869 }
00870 
00871 STRSAFEAPI StringCbLengthW(STRSAFE_LPCWSTR psz,size_t cbMax,size_t *pcbLength) {
00872   HRESULT hr;
00873   size_t cchMax;
00874   size_t cchLength = 0;
00875   cchMax = cbMax / sizeof(wchar_t);
00876   if(!psz || (cchMax > STRSAFE_MAX_CCH)) hr = STRSAFE_E_INVALID_PARAMETER;
00877   else hr = StringLengthWorkerW(psz,cchMax,&cchLength);
00878   if(pcbLength) {
00879     if(SUCCEEDED(hr)) {
00880       *pcbLength = cchLength*sizeof(wchar_t);
00881     } else {
00882       *pcbLength = 0;
00883     }
00884   }
00885   return hr;
00886 }
00887 
00888 STRSAFEAPI StringCopyWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc) {
00889   HRESULT hr = S_OK;
00890   if(cchDest==0) hr = STRSAFE_E_INVALID_PARAMETER;
00891   else {
00892     while(cchDest && (*pszSrc!='\0')) {
00893       *pszDest++ = *pszSrc++;
00894       cchDest--;
00895     }
00896     if(cchDest==0) {
00897       pszDest--;
00898       hr = STRSAFE_E_INSUFFICIENT_BUFFER;
00899     }
00900     *pszDest= '\0';
00901   }
00902   return hr;
00903 }
00904 
00905 STRSAFEAPI StringCopyWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc) {
00906   HRESULT hr = S_OK;
00907   if(cchDest==0) hr = STRSAFE_E_INVALID_PARAMETER;
00908   else {
00909     while(cchDest && (*pszSrc!=L'\0')) {
00910       *pszDest++ = *pszSrc++;
00911       cchDest--;
00912     }
00913     if(cchDest==0) {
00914       pszDest--;
00915       hr = STRSAFE_E_INSUFFICIENT_BUFFER;
00916     }
00917     *pszDest= L'\0';
00918   }
00919   return hr;
00920 }
00921 
00922 STRSAFEAPI StringCopyExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
00923   HRESULT hr = S_OK;
00924   STRSAFE_LPSTR pszDestEnd = pszDest;
00925   size_t cchRemaining = 0;
00926   if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
00927   else {
00928     if(dwFlags & STRSAFE_IGNORE_NULLS) {
00929       if(!pszDest) {
00930     if((cchDest!=0) || (cbDest!=0)) hr = STRSAFE_E_INVALID_PARAMETER;
00931       }
00932       if(!pszSrc) pszSrc = "";
00933     }
00934     if(SUCCEEDED(hr)) {
00935       if(cchDest==0) {
00936     pszDestEnd = pszDest;
00937     cchRemaining = 0;
00938     if(*pszSrc!='\0') {
00939       if(!pszDest) hr = STRSAFE_E_INVALID_PARAMETER;
00940       else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
00941     }
00942       } else {
00943     pszDestEnd = pszDest;
00944     cchRemaining = cchDest;
00945     while(cchRemaining && (*pszSrc!='\0')) {
00946       *pszDestEnd++ = *pszSrc++;
00947       cchRemaining--;
00948     }
00949     if(cchRemaining > 0) {
00950       if(dwFlags & STRSAFE_FILL_BEHIND_NULL) {
00951         memset(pszDestEnd + 1,STRSAFE_GET_FILL_PATTERN(dwFlags),((cchRemaining - 1)*sizeof(char)) + (cbDest % sizeof(char)));
00952       }
00953     } else {
00954       pszDestEnd--;
00955       cchRemaining++;
00956       hr = STRSAFE_E_INSUFFICIENT_BUFFER;
00957     }
00958     *pszDestEnd = '\0';
00959       }
00960     }
00961   }
00962   if(FAILED(hr)) {
00963     if(pszDest) {
00964       if(dwFlags & STRSAFE_FILL_ON_FAILURE) {
00965     memset(pszDest,STRSAFE_GET_FILL_PATTERN(dwFlags),cbDest);
00966     if(STRSAFE_GET_FILL_PATTERN(dwFlags)==0) {
00967       pszDestEnd = pszDest;
00968       cchRemaining = cchDest;
00969     } else if(cchDest > 0) {
00970       pszDestEnd = pszDest + cchDest - 1;
00971       cchRemaining = 1;
00972       *pszDestEnd = '\0';
00973     }
00974       }
00975       if(dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION)) {
00976     if(cchDest > 0) {
00977       pszDestEnd = pszDest;
00978       cchRemaining = cchDest;
00979       *pszDestEnd = '\0';
00980     }
00981       }
00982     }
00983   }
00984   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
00985     if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
00986     if(pcchRemaining) *pcchRemaining = cchRemaining;
00987   }
00988   return hr;
00989 }
00990 
00991 STRSAFEAPI StringCopyExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
00992   HRESULT hr = S_OK;
00993   STRSAFE_LPWSTR pszDestEnd = pszDest;
00994   size_t cchRemaining = 0;
00995   if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
00996   else {
00997     if(dwFlags & STRSAFE_IGNORE_NULLS) {
00998       if(!pszDest) {
00999     if((cchDest!=0) || (cbDest!=0)) hr = STRSAFE_E_INVALID_PARAMETER;
01000       }
01001       if(!pszSrc) pszSrc = L"";
01002     }
01003     if(SUCCEEDED(hr)) {
01004       if(cchDest==0) {
01005     pszDestEnd = pszDest;
01006     cchRemaining = 0;
01007     if(*pszSrc!=L'\0') {
01008       if(!pszDest) hr = STRSAFE_E_INVALID_PARAMETER;
01009       else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01010     }
01011       } else {
01012     pszDestEnd = pszDest;
01013     cchRemaining = cchDest;
01014     while(cchRemaining && (*pszSrc!=L'\0')) {
01015       *pszDestEnd++ = *pszSrc++;
01016       cchRemaining--;
01017     }
01018     if(cchRemaining > 0) {
01019       if(dwFlags & STRSAFE_FILL_BEHIND_NULL) {
01020         memset(pszDestEnd + 1,STRSAFE_GET_FILL_PATTERN(dwFlags),((cchRemaining - 1)*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)));
01021       }
01022     } else {
01023       pszDestEnd--;
01024       cchRemaining++;
01025       hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01026     }
01027     *pszDestEnd = L'\0';
01028       }
01029     }
01030   }
01031   if(FAILED(hr)) {
01032     if(pszDest) {
01033       if(dwFlags & STRSAFE_FILL_ON_FAILURE) {
01034     memset(pszDest,STRSAFE_GET_FILL_PATTERN(dwFlags),cbDest);
01035     if(STRSAFE_GET_FILL_PATTERN(dwFlags)==0) {
01036       pszDestEnd = pszDest;
01037       cchRemaining = cchDest;
01038     } else if(cchDest > 0) {
01039       pszDestEnd = pszDest + cchDest - 1;
01040       cchRemaining = 1;
01041       *pszDestEnd = L'\0';
01042     }
01043       }
01044       if(dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION)) {
01045     if(cchDest > 0) {
01046       pszDestEnd = pszDest;
01047       cchRemaining = cchDest;
01048       *pszDestEnd = L'\0';
01049     }
01050       }
01051     }
01052   }
01053   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
01054     if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
01055     if(pcchRemaining) *pcchRemaining = cchRemaining;
01056   }
01057   return hr;
01058 }
01059 
01060 STRSAFEAPI StringCopyNWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchSrc) {
01061   HRESULT hr = S_OK;
01062   if(cchDest==0) hr = STRSAFE_E_INVALID_PARAMETER;
01063   else {
01064     while(cchDest && cchSrc && (*pszSrc!='\0')) {
01065       *pszDest++ = *pszSrc++;
01066       cchDest--;
01067       cchSrc--;
01068     }
01069     if(cchDest==0) {
01070       pszDest--;
01071       hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01072     }
01073     *pszDest= '\0';
01074   }
01075   return hr;
01076 }
01077 
01078 STRSAFEAPI StringCopyNWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy) {
01079   HRESULT hr = S_OK;
01080   if(cchDest==0) hr = STRSAFE_E_INVALID_PARAMETER;
01081   else {
01082     while(cchDest && cchToCopy && (*pszSrc!=L'\0')) {
01083       *pszDest++ = *pszSrc++;
01084       cchDest--;
01085       cchToCopy--;
01086     }
01087     if(cchDest==0) {
01088       pszDest--;
01089       hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01090     }
01091     *pszDest= L'\0';
01092   }
01093   return hr;
01094 }
01095 
01096 STRSAFEAPI StringCopyNExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
01097   HRESULT hr = S_OK;
01098   STRSAFE_LPSTR pszDestEnd = pszDest;
01099   size_t cchRemaining = 0;
01100   if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
01101   else if(cchToCopy > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
01102   else {
01103     if(dwFlags & STRSAFE_IGNORE_NULLS) {
01104       if(!pszDest) {
01105     if((cchDest!=0) || (cbDest!=0)) hr = STRSAFE_E_INVALID_PARAMETER;
01106       }
01107       if(!pszSrc) pszSrc = "";
01108     }
01109     if(SUCCEEDED(hr)) {
01110       if(cchDest==0) {
01111     pszDestEnd = pszDest;
01112     cchRemaining = 0;
01113     if((cchToCopy!=0) && (*pszSrc!='\0')) {
01114       if(!pszDest) hr = STRSAFE_E_INVALID_PARAMETER;
01115       else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01116     }
01117       } else {
01118     pszDestEnd = pszDest;
01119     cchRemaining = cchDest;
01120     while(cchRemaining && cchToCopy && (*pszSrc!='\0')) {
01121       *pszDestEnd++ = *pszSrc++;
01122       cchRemaining--;
01123       cchToCopy--;
01124     }
01125     if(cchRemaining > 0) {
01126       if(dwFlags & STRSAFE_FILL_BEHIND_NULL) {
01127         memset(pszDestEnd + 1,STRSAFE_GET_FILL_PATTERN(dwFlags),((cchRemaining - 1)*sizeof(char)) + (cbDest % sizeof(char)));
01128       }
01129     } else {
01130       pszDestEnd--;
01131       cchRemaining++;
01132       hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01133     }
01134     *pszDestEnd = '\0';
01135       }
01136     }
01137   }
01138   if(FAILED(hr)) {
01139     if(pszDest) {
01140       if(dwFlags & STRSAFE_FILL_ON_FAILURE) {
01141     memset(pszDest,STRSAFE_GET_FILL_PATTERN(dwFlags),cbDest);
01142     if(STRSAFE_GET_FILL_PATTERN(dwFlags)==0) {
01143       pszDestEnd = pszDest;
01144       cchRemaining = cchDest;
01145     } else if(cchDest > 0) {
01146       pszDestEnd = pszDest + cchDest - 1;
01147       cchRemaining = 1;
01148       *pszDestEnd = '\0';
01149     }
01150       }
01151       if(dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION)) {
01152     if(cchDest > 0) {
01153       pszDestEnd = pszDest;
01154       cchRemaining = cchDest;
01155       *pszDestEnd = '\0';
01156     }
01157       }
01158     }
01159   }
01160   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
01161     if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
01162     if(pcchRemaining) *pcchRemaining = cchRemaining;
01163   }
01164   return hr;
01165 }
01166 
01167 STRSAFEAPI StringCopyNExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
01168   HRESULT hr = S_OK;
01169   STRSAFE_LPWSTR pszDestEnd = pszDest;
01170   size_t cchRemaining = 0;
01171   if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
01172   else if(cchToCopy > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
01173   else {
01174     if(dwFlags & STRSAFE_IGNORE_NULLS) {
01175       if(!pszDest) {
01176     if((cchDest!=0) || (cbDest!=0)) hr = STRSAFE_E_INVALID_PARAMETER;
01177       }
01178       if(!pszSrc) pszSrc = L"";
01179     }
01180     if(SUCCEEDED(hr)) {
01181       if(cchDest==0) {
01182     pszDestEnd = pszDest;
01183     cchRemaining = 0;
01184     if((cchToCopy!=0) && (*pszSrc!=L'\0')) {
01185       if(!pszDest) hr = STRSAFE_E_INVALID_PARAMETER;
01186       else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01187     }
01188       } else {
01189     pszDestEnd = pszDest;
01190     cchRemaining = cchDest;
01191     while(cchRemaining && cchToCopy && (*pszSrc!=L'\0')) {
01192       *pszDestEnd++ = *pszSrc++;
01193       cchRemaining--;
01194       cchToCopy--;
01195     }
01196     if(cchRemaining > 0) {
01197       if(dwFlags & STRSAFE_FILL_BEHIND_NULL) {
01198         memset(pszDestEnd + 1,STRSAFE_GET_FILL_PATTERN(dwFlags),((cchRemaining - 1)*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)));
01199       }
01200     } else {
01201       pszDestEnd--;
01202       cchRemaining++;
01203       hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01204     }
01205     *pszDestEnd = L'\0';
01206       }
01207     }
01208   }
01209   if(FAILED(hr)) {
01210     if(pszDest) {
01211       if(dwFlags & STRSAFE_FILL_ON_FAILURE) {
01212     memset(pszDest,STRSAFE_GET_FILL_PATTERN(dwFlags),cbDest);
01213     if(STRSAFE_GET_FILL_PATTERN(dwFlags)==0) {
01214       pszDestEnd = pszDest;
01215       cchRemaining = cchDest;
01216     } else if(cchDest > 0) {
01217       pszDestEnd = pszDest + cchDest - 1;
01218       cchRemaining = 1;
01219       *pszDestEnd = L'\0';
01220     }
01221       }
01222       if(dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION)) {
01223     if(cchDest > 0) {
01224       pszDestEnd = pszDest;
01225       cchRemaining = cchDest;
01226       *pszDestEnd = L'\0';
01227     }
01228       }
01229     }
01230   }
01231   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
01232     if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
01233     if(pcchRemaining) *pcchRemaining = cchRemaining;
01234   }
01235   return hr;
01236 }
01237 
01238 STRSAFEAPI StringCatWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc) {
01239   HRESULT hr;
01240   size_t cchDestLength;
01241   hr = StringLengthWorkerA(pszDest,cchDest,&cchDestLength);
01242   if(SUCCEEDED(hr)) hr = StringCopyWorkerA(pszDest + cchDestLength,cchDest - cchDestLength,pszSrc);
01243   return hr;
01244 }
01245 
01246 STRSAFEAPI StringCatWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc) {
01247   HRESULT hr;
01248   size_t cchDestLength;
01249   hr = StringLengthWorkerW(pszDest,cchDest,&cchDestLength);
01250   if(SUCCEEDED(hr)) hr = StringCopyWorkerW(pszDest + cchDestLength,cchDest - cchDestLength,pszSrc);
01251   return hr;
01252 }
01253 
01254 STRSAFEAPI StringCatExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
01255   HRESULT hr = S_OK;
01256   STRSAFE_LPSTR pszDestEnd = pszDest;
01257   size_t cchRemaining = 0;
01258   if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
01259   else {
01260     size_t cchDestLength;
01261     if(dwFlags & STRSAFE_IGNORE_NULLS) {
01262       if(!pszDest) {
01263     if((cchDest==0) && (cbDest==0)) cchDestLength = 0;
01264     else hr = STRSAFE_E_INVALID_PARAMETER;
01265       } else {
01266     hr = StringLengthWorkerA(pszDest,cchDest,&cchDestLength);
01267     if(SUCCEEDED(hr)) {
01268       pszDestEnd = pszDest + cchDestLength;
01269       cchRemaining = cchDest - cchDestLength;
01270     }
01271       }
01272       if(!pszSrc) pszSrc = "";
01273     } else {
01274       hr = StringLengthWorkerA(pszDest,cchDest,&cchDestLength);
01275       if(SUCCEEDED(hr)) {
01276     pszDestEnd = pszDest + cchDestLength;
01277     cchRemaining = cchDest - cchDestLength;
01278       }
01279     }
01280     if(SUCCEEDED(hr)) {
01281       if(cchDest==0) {
01282     if(*pszSrc!='\0') {
01283       if(!pszDest) hr = STRSAFE_E_INVALID_PARAMETER;
01284       else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01285     }
01286       } else hr = StringCopyExWorkerA(pszDestEnd,cchRemaining,(cchRemaining*sizeof(char)) + (cbDest % sizeof(char)),pszSrc,&pszDestEnd,&cchRemaining,dwFlags & (~(STRSAFE_FILL_ON_FAILURE | STRSAFE_NULL_ON_FAILURE)));
01287     }
01288   }
01289   if(FAILED(hr)) {
01290     if(pszDest) {
01291       if(dwFlags & STRSAFE_FILL_ON_FAILURE) {
01292     memset(pszDest,STRSAFE_GET_FILL_PATTERN(dwFlags),cbDest);
01293     if(STRSAFE_GET_FILL_PATTERN(dwFlags)==0) {
01294       pszDestEnd = pszDest;
01295       cchRemaining = cchDest;
01296     } else if(cchDest > 0) {
01297       pszDestEnd = pszDest + cchDest - 1;
01298       cchRemaining = 1;
01299       *pszDestEnd = '\0';
01300     }
01301       }
01302       if(dwFlags & STRSAFE_NULL_ON_FAILURE) {
01303     if(cchDest > 0) {
01304       pszDestEnd = pszDest;
01305       cchRemaining = cchDest;
01306       *pszDestEnd = '\0';
01307     }
01308       }
01309     }
01310   }
01311   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
01312     if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
01313     if(pcchRemaining) *pcchRemaining = cchRemaining;
01314   }
01315   return hr;
01316 }
01317 
01318 STRSAFEAPI StringCatExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
01319   HRESULT hr = S_OK;
01320   STRSAFE_LPWSTR pszDestEnd = pszDest;
01321   size_t cchRemaining = 0;
01322   if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
01323   else {
01324     size_t cchDestLength;
01325     if(dwFlags & STRSAFE_IGNORE_NULLS) {
01326       if(!pszDest) {
01327     if((cchDest==0) && (cbDest==0)) cchDestLength = 0;
01328     else hr = STRSAFE_E_INVALID_PARAMETER;
01329       } else {
01330     hr = StringLengthWorkerW(pszDest,cchDest,&cchDestLength);
01331     if(SUCCEEDED(hr)) {
01332       pszDestEnd = pszDest + cchDestLength;
01333       cchRemaining = cchDest - cchDestLength;
01334     }
01335       }
01336       if(!pszSrc) pszSrc = L"";
01337     } else {
01338       hr = StringLengthWorkerW(pszDest,cchDest,&cchDestLength);
01339       if(SUCCEEDED(hr)) {
01340     pszDestEnd = pszDest + cchDestLength;
01341     cchRemaining = cchDest - cchDestLength;
01342       }
01343     }
01344     if(SUCCEEDED(hr)) {
01345       if(cchDest==0) {
01346     if(*pszSrc!=L'\0') {
01347       if(!pszDest) hr = STRSAFE_E_INVALID_PARAMETER;
01348       else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01349     }
01350       } 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)));
01351     }
01352   }
01353   if(FAILED(hr)) {
01354     if(pszDest) {
01355       if(dwFlags & STRSAFE_FILL_ON_FAILURE) {
01356     memset(pszDest,STRSAFE_GET_FILL_PATTERN(dwFlags),cbDest);
01357     if(STRSAFE_GET_FILL_PATTERN(dwFlags)==0) {
01358       pszDestEnd = pszDest;
01359       cchRemaining = cchDest;
01360     } else if(cchDest > 0) {
01361       pszDestEnd = pszDest + cchDest - 1;
01362       cchRemaining = 1;
01363       *pszDestEnd = L'\0';
01364     }
01365       }
01366       if(dwFlags & STRSAFE_NULL_ON_FAILURE) {
01367     if(cchDest > 0) {
01368       pszDestEnd = pszDest;
01369       cchRemaining = cchDest;
01370       *pszDestEnd = L'\0';
01371     }
01372       }
01373     }
01374   }
01375   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
01376     if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
01377     if(pcchRemaining) *pcchRemaining = cchRemaining;
01378   }
01379   return hr;
01380 }
01381 
01382 STRSAFEAPI StringCatNWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend) {
01383   HRESULT hr;
01384   size_t cchDestLength;
01385   hr = StringLengthWorkerA(pszDest,cchDest,&cchDestLength);
01386   if(SUCCEEDED(hr)) hr = StringCopyNWorkerA(pszDest + cchDestLength,cchDest - cchDestLength,pszSrc,cchToAppend);
01387   return hr;
01388 }
01389 
01390 STRSAFEAPI StringCatNWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend) {
01391   HRESULT hr;
01392   size_t cchDestLength;
01393   hr = StringLengthWorkerW(pszDest,cchDest,&cchDestLength);
01394   if(SUCCEEDED(hr)) hr = StringCopyNWorkerW(pszDest + cchDestLength,cchDest - cchDestLength,pszSrc,cchToAppend);
01395   return hr;
01396 }
01397 
01398 STRSAFEAPI StringCatNExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
01399   HRESULT hr = S_OK;
01400   STRSAFE_LPSTR pszDestEnd = pszDest;
01401   size_t cchRemaining = 0;
01402   size_t cchDestLength = 0;
01403   if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
01404   else if(cchToAppend > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
01405   else {
01406     if(dwFlags & STRSAFE_IGNORE_NULLS) {
01407       if(!pszDest) {
01408     if((cchDest==0) && (cbDest==0)) cchDestLength = 0;
01409     else hr = STRSAFE_E_INVALID_PARAMETER;
01410       } else {
01411     hr = StringLengthWorkerA(pszDest,cchDest,&cchDestLength);
01412     if(SUCCEEDED(hr)) {
01413       pszDestEnd = pszDest + cchDestLength;
01414       cchRemaining = cchDest - cchDestLength;
01415     }
01416       }
01417       if(!pszSrc) pszSrc = "";
01418     } else {
01419       hr = StringLengthWorkerA(pszDest,cchDest,&cchDestLength);
01420       if(SUCCEEDED(hr)) {
01421     pszDestEnd = pszDest + cchDestLength;
01422     cchRemaining = cchDest - cchDestLength;
01423       }
01424     }
01425     if(SUCCEEDED(hr)) {
01426       if(cchDest==0) {
01427     if((cchToAppend!=0) && (*pszSrc!='\0')) {
01428       if(!pszDest) hr = STRSAFE_E_INVALID_PARAMETER;
01429       else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01430     }
01431       } else hr = StringCopyNExWorkerA(pszDestEnd,cchRemaining,(cchRemaining*sizeof(char)) + (cbDest % sizeof(char)),pszSrc,cchToAppend,&pszDestEnd,&cchRemaining,dwFlags & (~(STRSAFE_FILL_ON_FAILURE | STRSAFE_NULL_ON_FAILURE)));
01432     }
01433   }
01434   if(FAILED(hr)) {
01435     if(pszDest) {
01436       if(dwFlags & STRSAFE_FILL_ON_FAILURE) {
01437     memset(pszDest,STRSAFE_GET_FILL_PATTERN(dwFlags),cbDest);
01438     if(STRSAFE_GET_FILL_PATTERN(dwFlags)==0) {
01439       pszDestEnd = pszDest;
01440       cchRemaining = cchDest;
01441     } else if(cchDest > 0) {
01442       pszDestEnd = pszDest + cchDest - 1;
01443       cchRemaining = 1;
01444       *pszDestEnd = '\0';
01445     }
01446       }
01447       if(dwFlags & (STRSAFE_NULL_ON_FAILURE)) {
01448     if(cchDest > 0) {
01449       pszDestEnd = pszDest;
01450       cchRemaining = cchDest;
01451       *pszDestEnd = '\0';
01452     }
01453       }
01454     }
01455   }
01456   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
01457     if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
01458     if(pcchRemaining) *pcchRemaining = cchRemaining;
01459   }
01460   return hr;
01461 }
01462 
01463 STRSAFEAPI StringCatNExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
01464   HRESULT hr = S_OK;
01465   STRSAFE_LPWSTR pszDestEnd = pszDest;
01466   size_t cchRemaining = 0;
01467   size_t cchDestLength = 0;
01468   if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
01469   else if(cchToAppend > STRSAFE_MAX_CCH) hr = STRSAFE_E_INVALID_PARAMETER;
01470   else {
01471     if(dwFlags & STRSAFE_IGNORE_NULLS) {
01472       if(!pszDest) {
01473     if((cchDest==0) && (cbDest==0)) cchDestLength = 0;
01474     else hr = STRSAFE_E_INVALID_PARAMETER;
01475       } else {
01476     hr = StringLengthWorkerW(pszDest,cchDest,&cchDestLength);
01477     if(SUCCEEDED(hr)) {
01478       pszDestEnd = pszDest + cchDestLength;
01479       cchRemaining = cchDest - cchDestLength;
01480     }
01481       }
01482       if(!pszSrc) pszSrc = L"";
01483     } else {
01484       hr = StringLengthWorkerW(pszDest,cchDest,&cchDestLength);
01485       if(SUCCEEDED(hr)) {
01486     pszDestEnd = pszDest + cchDestLength;
01487     cchRemaining = cchDest - cchDestLength;
01488       }
01489     }
01490     if(SUCCEEDED(hr)) {
01491       if(cchDest==0) {
01492     if((cchToAppend!=0) && (*pszSrc!=L'\0')) {
01493       if(!pszDest) hr = STRSAFE_E_INVALID_PARAMETER;
01494       else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01495     }
01496       } 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)));
01497     }
01498   }
01499   if(FAILED(hr)) {
01500     if(pszDest) {
01501       if(dwFlags & STRSAFE_FILL_ON_FAILURE) {
01502     memset(pszDest,STRSAFE_GET_FILL_PATTERN(dwFlags),cbDest);
01503     if(STRSAFE_GET_FILL_PATTERN(dwFlags)==0) {
01504       pszDestEnd = pszDest;
01505       cchRemaining = cchDest;
01506     } else if(cchDest > 0) {
01507       pszDestEnd = pszDest + cchDest - 1;
01508       cchRemaining = 1;
01509       *pszDestEnd = L'\0';
01510     }
01511       }
01512       if(dwFlags & (STRSAFE_NULL_ON_FAILURE)) {
01513     if(cchDest > 0) {
01514       pszDestEnd = pszDest;
01515       cchRemaining = cchDest;
01516       *pszDestEnd = L'\0';
01517     }
01518       }
01519     }
01520   }
01521   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
01522     if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
01523     if(pcchRemaining) *pcchRemaining = cchRemaining;
01524   }
01525   return hr;
01526 }
01527 
01528 STRSAFEAPI StringVPrintfWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,va_list argList) {
01529   HRESULT hr = S_OK;
01530   if(cchDest==0) hr = STRSAFE_E_INVALID_PARAMETER;
01531   else {
01532     int iRet;
01533     size_t cchMax;
01534     cchMax = cchDest - 1;
01535     iRet = _vsnprintf(pszDest,cchMax,pszFormat,argList);
01536     if((iRet < 0) || (((size_t)iRet) > cchMax)) {
01537       pszDest += cchMax;
01538       *pszDest = '\0';
01539       hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01540     } else if(((size_t)iRet)==cchMax) {
01541       pszDest += cchMax;
01542       *pszDest = '\0';
01543     }
01544   }
01545   return hr;
01546 }
01547 
01548 STRSAFEAPI StringVPrintfWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,va_list argList) {
01549   HRESULT hr = S_OK;
01550   if(cchDest==0) hr = STRSAFE_E_INVALID_PARAMETER;
01551   else {
01552     int iRet;
01553     size_t cchMax;
01554     cchMax = cchDest - 1;
01555     iRet = _vsnwprintf(pszDest,cchMax,pszFormat,argList);
01556     if((iRet < 0) || (((size_t)iRet) > cchMax)) {
01557       pszDest += cchMax;
01558       *pszDest = L'\0';
01559       hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01560     } else if(((size_t)iRet)==cchMax) {
01561       pszDest += cchMax;
01562       *pszDest = L'\0';
01563     }
01564   }
01565   return hr;
01566 }
01567 
01568 STRSAFEAPI StringVPrintfExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList) {
01569   HRESULT hr = S_OK;
01570   STRSAFE_LPSTR pszDestEnd = pszDest;
01571   size_t cchRemaining = 0;
01572   if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
01573   else {
01574     if(dwFlags & STRSAFE_IGNORE_NULLS) {
01575       if(!pszDest) {
01576     if((cchDest!=0) || (cbDest!=0)) hr = STRSAFE_E_INVALID_PARAMETER;
01577       }
01578       if(!pszFormat) pszFormat = "";
01579     }
01580     if(SUCCEEDED(hr)) {
01581       if(cchDest==0) {
01582     pszDestEnd = pszDest;
01583     cchRemaining = 0;
01584     if(*pszFormat!='\0') {
01585       if(!pszDest) hr = STRSAFE_E_INVALID_PARAMETER;
01586       else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01587     }
01588       } else {
01589     int iRet;
01590     size_t cchMax;
01591     cchMax = cchDest - 1;
01592     iRet = _vsnprintf(pszDest,cchMax,pszFormat,argList);
01593     if((iRet < 0) || (((size_t)iRet) > cchMax)) {
01594       pszDestEnd = pszDest + cchMax;
01595       cchRemaining = 1;
01596       *pszDestEnd = '\0';
01597       hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01598     } else if(((size_t)iRet)==cchMax) {
01599       pszDestEnd = pszDest + cchMax;
01600       cchRemaining = 1;
01601       *pszDestEnd = '\0';
01602     } else if(((size_t)iRet) < cchMax) {
01603       pszDestEnd = pszDest + iRet;
01604       cchRemaining = cchDest - iRet;
01605       if(dwFlags & STRSAFE_FILL_BEHIND_NULL) {
01606         memset(pszDestEnd + 1,STRSAFE_GET_FILL_PATTERN(dwFlags),((cchRemaining - 1)*sizeof(char)) + (cbDest % sizeof(char)));
01607       }
01608     }
01609       }
01610     }
01611   }
01612   if(FAILED(hr)) {
01613     if(pszDest) {
01614       if(dwFlags & STRSAFE_FILL_ON_FAILURE) {
01615     memset(pszDest,STRSAFE_GET_FILL_PATTERN(dwFlags),cbDest);
01616     if(STRSAFE_GET_FILL_PATTERN(dwFlags)==0) {
01617       pszDestEnd = pszDest;
01618       cchRemaining = cchDest;
01619     } else if(cchDest > 0) {
01620       pszDestEnd = pszDest + cchDest - 1;
01621       cchRemaining = 1;
01622       *pszDestEnd = '\0';
01623     }
01624       }
01625       if(dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION)) {
01626     if(cchDest > 0) {
01627       pszDestEnd = pszDest;
01628       cchRemaining = cchDest;
01629       *pszDestEnd = '\0';
01630     }
01631       }
01632     }
01633   }
01634   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
01635     if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
01636     if(pcchRemaining) *pcchRemaining = cchRemaining;
01637   }
01638   return hr;
01639 }
01640 
01641 STRSAFEAPI StringVPrintfExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList) {
01642   HRESULT hr = S_OK;
01643   STRSAFE_LPWSTR pszDestEnd = pszDest;
01644   size_t cchRemaining = 0;
01645   if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
01646   else {
01647     if(dwFlags & STRSAFE_IGNORE_NULLS) {
01648       if(!pszDest) {
01649     if((cchDest!=0) || (cbDest!=0)) hr = STRSAFE_E_INVALID_PARAMETER;
01650       }
01651       if(!pszFormat) pszFormat = L"";
01652     }
01653     if(SUCCEEDED(hr)) {
01654       if(cchDest==0) {
01655     pszDestEnd = pszDest;
01656     cchRemaining = 0;
01657     if(*pszFormat!=L'\0') {
01658       if(!pszDest) hr = STRSAFE_E_INVALID_PARAMETER;
01659       else hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01660     }
01661       } else {
01662     int iRet;
01663     size_t cchMax;
01664     cchMax = cchDest - 1;
01665     iRet = _vsnwprintf(pszDest,cchMax,pszFormat,argList);
01666     if((iRet < 0) || (((size_t)iRet) > cchMax)) {
01667       pszDestEnd = pszDest + cchMax;
01668       cchRemaining = 1;
01669       *pszDestEnd = L'\0';
01670       hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01671     } else if(((size_t)iRet)==cchMax) {
01672       pszDestEnd = pszDest + cchMax;
01673       cchRemaining = 1;
01674       *pszDestEnd = L'\0';
01675     } else if(((size_t)iRet) < cchMax) {
01676       pszDestEnd = pszDest + iRet;
01677       cchRemaining = cchDest - iRet;
01678       if(dwFlags & STRSAFE_FILL_BEHIND_NULL) {
01679         memset(pszDestEnd + 1,STRSAFE_GET_FILL_PATTERN(dwFlags),((cchRemaining - 1)*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)));
01680       }
01681     }
01682       }
01683     }
01684   }
01685   if(FAILED(hr)) {
01686     if(pszDest) {
01687       if(dwFlags & STRSAFE_FILL_ON_FAILURE) {
01688     memset(pszDest,STRSAFE_GET_FILL_PATTERN(dwFlags),cbDest);
01689     if(STRSAFE_GET_FILL_PATTERN(dwFlags)==0) {
01690       pszDestEnd = pszDest;
01691       cchRemaining = cchDest;
01692     } else if(cchDest > 0) {
01693       pszDestEnd = pszDest + cchDest - 1;
01694       cchRemaining = 1;
01695       *pszDestEnd = L'\0';
01696     }
01697       }
01698       if(dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION)) {
01699     if(cchDest > 0) {
01700       pszDestEnd = pszDest;
01701       cchRemaining = cchDest;
01702       *pszDestEnd = L'\0';
01703     }
01704       }
01705     }
01706   }
01707   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER)) {
01708     if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
01709     if(pcchRemaining) *pcchRemaining = cchRemaining;
01710   }
01711   return hr;
01712 }
01713 
01714 STRSAFEAPI StringLengthWorkerA(STRSAFE_LPCSTR psz,size_t cchMax,size_t *pcchLength) {
01715   HRESULT hr = S_OK;
01716   size_t cchMaxPrev = cchMax;
01717   while(cchMax && (*psz!='\0')) {
01718     psz++;
01719     cchMax--;
01720   }
01721   if(cchMax==0) hr = STRSAFE_E_INVALID_PARAMETER;
01722   if(pcchLength) {
01723     if(SUCCEEDED(hr)) *pcchLength = cchMaxPrev - cchMax;
01724     else *pcchLength = 0;
01725   }
01726   return hr;
01727 }
01728 
01729 STRSAFEAPI StringLengthWorkerW(STRSAFE_LPCWSTR psz,size_t cchMax,size_t *pcchLength) {
01730   HRESULT hr = S_OK;
01731   size_t cchMaxPrev = cchMax;
01732   while(cchMax && (*psz!=L'\0')) {
01733     psz++;
01734     cchMax--;
01735   }
01736   if(cchMax==0) hr = STRSAFE_E_INVALID_PARAMETER;
01737   if(pcchLength) {
01738     if(SUCCEEDED(hr)) *pcchLength = cchMaxPrev - cchMax;
01739     else *pcchLength = 0;
01740   }
01741   return hr;
01742 }
01743 
01744 STRSAFE_INLINE_API StringGetsExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
01745   HRESULT hr = S_OK;
01746   STRSAFE_LPSTR pszDestEnd = pszDest;
01747   size_t cchRemaining = 0;
01748 
01749   if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STRSAFE_E_INVALID_PARAMETER;
01750   else {
01751     if(dwFlags & STRSAFE_IGNORE_NULLS) {
01752       if(!pszDest) {
01753     if((cchDest!=0) || (cbDest!=0)) hr = STRSAFE_E_INVALID_PARAMETER;
01754       }
01755     }
01756     if(SUCCEEDED(hr)) {
01757       if(cchDest <= 1) {
01758     pszDestEnd = pszDest;
01759     cchRemaining = cchDest;
01760     if(cchDest==1) *pszDestEnd = '\0';
01761     hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01762       } else {
01763     pszDestEnd = pszDest;
01764     cchRemaining = cchDest;
01765     while(cchRemaining > 1) {
01766       char ch;
01767       int i = getc(stdin);
01768       if(i==EOF) {
01769         if(pszDestEnd==pszDest) hr = STRSAFE_E_END_OF_FILE;
01770         break;
01771       }
01772       ch = (char)i;
01773       if(ch=='\n') break;
01774       *pszDestEnd = ch;
01775       pszDestEnd++;
01776       cchRemaining--;
01777     }
01778     if(cchRemaining > 0) {
01779       if(dwFlags & STRSAFE_FILL_BEHIND_NULL) {
01780         memset(pszDestEnd + 1,STRSAFE_GET_FILL_PATTERN(dwFlags),((cchRemaining - 1)*sizeof(char)) + (cbDest % sizeof(char)));
01781       }
01782     }
01783     *pszDestEnd = '\0';
01784       }
01785     }
01786   }
01787   if(FAILED(hr)) {
01788     if(pszDest) {
01789       if(dwFlags & STRSAFE_FILL_ON_FAILURE) {
01790     memset(pszDest,STRSAFE_GET_FILL_PATTERN(dwFlags),cbDest);
01791     if(STRSAFE_GET_FILL_PATTERN(dwFlags)==0) {
01792       pszDestEnd = pszDest;
01793       cchRemaining = cchDest;
01794     } else if(cchDest > 0) {
01795       pszDestEnd = pszDest + cchDest - 1;
01796       cchRemaining = 1;
01797       *pszDestEnd = '\0';
01798     }
01799       }
01800       if(dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION)) {
01801     if(cchDest > 0) {
01802       pszDestEnd = pszDest;
01803       cchRemaining = cchDest;
01804       *pszDestEnd = '\0';
01805     }
01806       }
01807     }
01808   }
01809   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER) || (hr==STRSAFE_E_END_OF_FILE)) {
01810     if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
01811     if(pcchRemaining) *pcchRemaining = cchRemaining;
01812   }
01813   return hr;
01814 }
01815 
01816 STRSAFE_INLINE_API StringGetsExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags) {
01817   HRESULT hr = S_OK;
01818   STRSAFE_LPWSTR pszDestEnd = pszDest;
01819   size_t cchRemaining = 0;
01820   if(dwFlags & (~STRSAFE_VALID_FLAGS)) {
01821     hr = STRSAFE_E_INVALID_PARAMETER;
01822   } else {
01823     if(dwFlags & STRSAFE_IGNORE_NULLS) {
01824       if(!pszDest) {
01825     if((cchDest!=0) || (cbDest!=0)) hr = STRSAFE_E_INVALID_PARAMETER;
01826       }
01827     }
01828     if(SUCCEEDED(hr)) {
01829       if(cchDest <= 1) {
01830     pszDestEnd = pszDest;
01831     cchRemaining = cchDest;
01832     if(cchDest==1) *pszDestEnd = L'\0';
01833     hr = STRSAFE_E_INSUFFICIENT_BUFFER;
01834       } else {
01835     pszDestEnd = pszDest;
01836     cchRemaining = cchDest;
01837     while(cchRemaining > 1) {
01838       wchar_t ch = getwc(stdin);
01839       if(ch==WEOF) {
01840         if(pszDestEnd==pszDest) hr = STRSAFE_E_END_OF_FILE;
01841         break;
01842       }
01843       if(ch==L'\n') break;
01844       *pszDestEnd = ch;
01845       pszDestEnd++;
01846       cchRemaining--;
01847     }
01848     if(cchRemaining > 0) {
01849       if(dwFlags & STRSAFE_FILL_BEHIND_NULL) {
01850         memset(pszDestEnd + 1,STRSAFE_GET_FILL_PATTERN(dwFlags),((cchRemaining - 1)*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)));
01851       }
01852     }
01853     *pszDestEnd = L'\0';
01854       }
01855     }
01856   }
01857   if(FAILED(hr)) {
01858     if(pszDest) {
01859       if(dwFlags & STRSAFE_FILL_ON_FAILURE) {
01860     memset(pszDest,STRSAFE_GET_FILL_PATTERN(dwFlags),cbDest);
01861     if(STRSAFE_GET_FILL_PATTERN(dwFlags)==0) {
01862       pszDestEnd = pszDest;
01863       cchRemaining = cchDest;
01864     } else if(cchDest > 0) {
01865       pszDestEnd = pszDest + cchDest - 1;
01866       cchRemaining = 1;
01867       *pszDestEnd = L'\0';
01868     }
01869       }
01870       if(dwFlags & (STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION)) {
01871     if(cchDest > 0) {
01872       pszDestEnd = pszDest;
01873       cchRemaining = cchDest;
01874       *pszDestEnd = L'\0';
01875     }
01876       }
01877     }
01878   }
01879   if(SUCCEEDED(hr) || (hr==STRSAFE_E_INSUFFICIENT_BUFFER) || (hr==STRSAFE_E_END_OF_FILE)) {
01880     if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
01881     if(pcchRemaining) *pcchRemaining = cchRemaining;
01882   }
01883   return hr;
01884 }
01885 #endif /* !__CRT__NO_INLINE */
01886 
01887 #define StringCopyWorkerA StringCopyWorkerA_instead_use_StringCchCopyA_or_StringCchCopyExA;
01888 #define StringCopyWorkerW StringCopyWorkerW_instead_use_StringCchCopyW_or_StringCchCopyExW;
01889 #define StringCopyExWorkerA StringCopyExWorkerA_instead_use_StringCchCopyA_or_StringCchCopyExA;
01890 #define StringCopyExWorkerW StringCopyExWorkerW_instead_use_StringCchCopyW_or_StringCchCopyExW;
01891 #define StringCatWorkerA StringCatWorkerA_instead_use_StringCchCatA_or_StringCchCatExA;
01892 #define StringCatWorkerW StringCatWorkerW_instead_use_StringCchCatW_or_StringCchCatExW;
01893 #define StringCatExWorkerA StringCatExWorkerA_instead_use_StringCchCatA_or_StringCchCatExA;
01894 #define StringCatExWorkerW StringCatExWorkerW_instead_use_StringCchCatW_or_StringCchCatExW;
01895 #define StringCatNWorkerA StringCatNWorkerA_instead_use_StringCchCatNA_or_StrincCbCatNA;
01896 #define StringCatNWorkerW StringCatNWorkerW_instead_use_StringCchCatNW_or_StringCbCatNW;
01897 #define StringCatNExWorkerA StringCatNExWorkerA_instead_use_StringCchCatNExA_or_StringCbCatNExA;
01898 #define StringCatNExWorkerW StringCatNExWorkerW_instead_use_StringCchCatNExW_or_StringCbCatNExW;
01899 #define StringVPrintfWorkerA StringVPrintfWorkerA_instead_use_StringCchVPrintfA_or_StringCchVPrintfExA;
01900 #define StringVPrintfWorkerW StringVPrintfWorkerW_instead_use_StringCchVPrintfW_or_StringCchVPrintfExW;
01901 #define StringVPrintfExWorkerA StringVPrintfExWorkerA_instead_use_StringCchVPrintfA_or_StringCchVPrintfExA;
01902 #define StringVPrintfExWorkerW StringVPrintfExWorkerW_instead_use_StringCchVPrintfW_or_StringCchVPrintfExW;
01903 #define StringLengthWorkerA StringLengthWorkerA_instead_use_StringCchLengthA_or_StringCbLengthA;
01904 #define StringLengthWorkerW StringLengthWorkerW_instead_use_StringCchLengthW_or_StringCbLengthW;
01905 #define StringGetsExWorkerA StringGetsExWorkerA_instead_use_StringCchGetsA_or_StringCbGetsA
01906 #define StringGetsExWorkerW StringGetsExWorkerW_instead_use_StringCchGetsW_or_StringCbGetsW
01907 
01908 /* Some Wine modules include us, don't specify STRSAFE_NO_DEPRECATE, and use deprecated functions */
01909 #ifndef STRSAFE_NO_DEPRECATE
01910 #define STRSAFE_NO_DEPRECATE
01911 #endif
01912 
01913 #ifndef STRSAFE_NO_DEPRECATE
01914 
01915 #undef strcpy
01916 #define strcpy strcpy_instead_use_StringCbCopyA_or_StringCchCopyA;
01917 
01918 #undef wcscpy
01919 #define wcscpy wcscpy_instead_use_StringCbCopyW_or_StringCchCopyW;
01920 
01921 #undef strcat
01922 #define strcat strcat_instead_use_StringCbCatA_or_StringCchCatA;
01923 
01924 #undef wcscat
01925 #define wcscat wcscat_instead_use_StringCbCatW_or_StringCchCatW;
01926 
01927 #undef sprintf
01928 #define sprintf sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA;
01929 
01930 #undef swprintf
01931 #define swprintf swprintf_instead_use_StringCbPrintfW_or_StringCchPrintfW;
01932 
01933 #undef vsprintf
01934 #define vsprintf vsprintf_instead_use_StringCbVPrintfA_or_StringCchVPrintfA;
01935 
01936 #undef vswprintf
01937 #define vswprintf vswprintf_instead_use_StringCbVPrintfW_or_StringCchVPrintfW;
01938 
01939 #undef _snprintf
01940 #define _snprintf _snprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA;
01941 
01942 #undef _snwprintf
01943 #define _snwprintf _snwprintf_instead_use_StringCbPrintfW_or_StringCchPrintfW;
01944 
01945 #undef _vsnprintf
01946 #define _vsnprintf _vsnprintf_instead_use_StringCbVPrintfA_or_StringCchVPrintfA;
01947 
01948 #undef _vsnwprintf
01949 #define _vsnwprintf _vsnwprintf_instead_use_StringCbVPrintfW_or_StringCchVPrintfW;
01950 
01951 #undef strcpyA
01952 #define strcpyA strcpyA_instead_use_StringCbCopyA_or_StringCchCopyA;
01953 
01954 #undef strcpyW
01955 #define strcpyW strcpyW_instead_use_StringCbCopyW_or_StringCchCopyW;
01956 
01957 #undef lstrcpy
01958 #define lstrcpy lstrcpy_instead_use_StringCbCopy_or_StringCchCopy;
01959 
01960 #undef lstrcpyA
01961 #define lstrcpyA lstrcpyA_instead_use_StringCbCopyA_or_StringCchCopyA;
01962 
01963 #undef lstrcpyW
01964 #define lstrcpyW lstrcpyW_instead_use_StringCbCopyW_or_StringCchCopyW;
01965 
01966 #undef StrCpy
01967 #define StrCpy StrCpy_instead_use_StringCbCopy_or_StringCchCopy;
01968 
01969 #undef StrCpyA
01970 #define StrCpyA StrCpyA_instead_use_StringCbCopyA_or_StringCchCopyA;
01971 
01972 #undef StrCpyW
01973 #define StrCpyW StrCpyW_instead_use_StringCbCopyW_or_StringCchCopyW;
01974 
01975 #undef _tcscpy
01976 #define _tcscpy _tcscpy_instead_use_StringCbCopy_or_StringCchCopy;
01977 
01978 #undef _ftcscpy
01979 #define _ftcscpy _ftcscpy_instead_use_StringCbCopy_or_StringCchCopy;
01980 
01981 #undef lstrcat
01982 #define lstrcat lstrcat_instead_use_StringCbCat_or_StringCchCat;
01983 
01984 #undef lstrcatA
01985 #define lstrcatA lstrcatA_instead_use_StringCbCatA_or_StringCchCatA;
01986 
01987 #undef lstrcatW
01988 #define lstrcatW lstrcatW_instead_use_StringCbCatW_or_StringCchCatW;
01989 
01990 #undef StrCat
01991 #define StrCat StrCat_instead_use_StringCbCat_or_StringCchCat;
01992 
01993 #undef StrCatA
01994 #define StrCatA StrCatA_instead_use_StringCbCatA_or_StringCchCatA;
01995 
01996 #undef StrCatW
01997 #define StrCatW StrCatW_instead_use_StringCbCatW_or_StringCchCatW;
01998 
01999 #undef StrNCat
02000 #define StrNCat StrNCat_instead_use_StringCbCatN_or_StringCchCatN;
02001 
02002 #undef StrNCatA
02003 #define StrNCatA StrNCatA_instead_use_StringCbCatNA_or_StringCchCatNA;
02004 
02005 #undef StrNCatW
02006 #define StrNCatW StrNCatW_instead_use_StringCbCatNW_or_StringCchCatNW;
02007 
02008 #undef StrCatN
02009 #define StrCatN StrCatN_instead_use_StringCbCatN_or_StringCchCatN;
02010 
02011 #undef StrCatNA
02012 #define StrCatNA StrCatNA_instead_use_StringCbCatNA_or_StringCchCatNA;
02013 
02014 #undef StrCatNW
02015 #define StrCatNW StrCatNW_instead_use_StringCbCatNW_or_StringCchCatNW;
02016 
02017 #undef _tcscat
02018 #define _tcscat _tcscat_instead_use_StringCbCat_or_StringCchCat;
02019 
02020 #undef _ftcscat
02021 #define _ftcscat _ftcscat_instead_use_StringCbCat_or_StringCchCat;
02022 
02023 #undef wsprintf
02024 #define wsprintf wsprintf_instead_use_StringCbPrintf_or_StringCchPrintf;
02025 
02026 #undef wsprintfA
02027 #define wsprintfA wsprintfA_instead_use_StringCbPrintfA_or_StringCchPrintfA;
02028 
02029 #undef wsprintfW
02030 #define wsprintfW wsprintfW_instead_use_StringCbPrintfW_or_StringCchPrintfW;
02031 
02032 #undef wvsprintf
02033 #define wvsprintf wvsprintf_instead_use_StringCbVPrintf_or_StringCchVPrintf;
02034 
02035 #undef wvsprintfA
02036 #define wvsprintfA wvsprintfA_instead_use_StringCbVPrintfA_or_StringCchVPrintfA;
02037 
02038 #undef wvsprintfW
02039 #define wvsprintfW wvsprintfW_instead_use_StringCbVPrintfW_or_StringCchVPrintfW;
02040 
02041 #undef _vstprintf
02042 #define _vstprintf _vstprintf_instead_use_StringCbVPrintf_or_StringCchVPrintf;
02043 
02044 #undef _vsntprintf
02045 #define _vsntprintf _vsntprintf_instead_use_StringCbVPrintf_or_StringCchVPrintf;
02046 
02047 #undef _stprintf
02048 #define _stprintf _stprintf_instead_use_StringCbPrintf_or_StringCchPrintf;
02049 
02050 #undef _sntprintf
02051 #define _sntprintf _sntprintf_instead_use_StringCbPrintf_or_StringCchPrintf;
02052 
02053 #undef _getts
02054 #define _getts _getts_instead_use_StringCbGets_or_StringCchGets;
02055 
02056 #undef gets
02057 #define gets _gets_instead_use_StringCbGetsA_or_StringCchGetsA;
02058 
02059 #undef _getws
02060 #define _getws _getws_instead_use_StringCbGetsW_or_StringCchGetsW;
02061 #endif
02062 #endif

Generated on Sat May 26 2012 04:31:13 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.