Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenstrsafe.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
1.7.6.1
|