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