1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633 |
- /**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
- #ifndef _NTSTRSAFE_H_INCLUDED_
- #define _NTSTRSAFE_H_INCLUDED_
- #include <_mingw_unicode.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdarg.h>
- #include <specstrings.h>
- #if defined(__CRT__NO_INLINE) && !defined(__CRT_STRSAFE_IMPL)
- #define __STRSAFE__NO_INLINE
- #endif
- #ifndef _SIZE_T_DEFINED
- #define _SIZE_T_DEFINED
- #undef size_t
- #ifdef _WIN64
- __MINGW_EXTENSION typedef unsigned __int64 size_t;
- #else
- typedef unsigned int size_t;
- #endif
- #endif
- #ifndef _WCHAR_T_DEFINED
- #define _WCHAR_T_DEFINED
- typedef unsigned short wchar_t;
- #endif
- #ifndef _NTSTATUS_DEFINED
- #define _NTSTATUS_DEFINED
- typedef __LONG32 NTSTATUS;
- #endif
- #ifndef C_ASSERT
- #ifdef _MSC_VER
- # define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
- #else
- # define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1])
- #endif
- #endif /* C_ASSERT */
- /* extern removed for C mode to avoid double extern qualifier from __CRT_INLINE */
- #ifdef __cplusplus
- #define _STRSAFE_EXTERN_C extern "C"
- #else
- #define _STRSAFE_EXTERN_C extern
- #endif
- #ifndef WINAPI
- #if defined(_ARM_)
- #define WINAPI
- #else
- #define WINAPI __stdcall
- #endif
- #endif
- #if !defined(__CRT__NO_INLINE) && !defined(__CRT_STRSAFE_IMPL)
- #define NTSTRSAFEDDI _STRSAFE_EXTERN_C __inline NTSTATUS WINAPI
- /* Variadic functions can't be __stdcall. */
- #define NTSTRSAFEDDIV _STRSAFE_EXTERN_C __inline NTSTATUS
- #else
- #define NTSTRSAFEDDI _STRSAFE_EXTERN_C NTSTATUS WINAPI
- /* Variadic functions can't be __stdcall. */
- #define NTSTRSAFEDDIV _STRSAFE_EXTERN_C NTSTATUS
- #endif
- #define NTSTRSAFE_MAX_CCH 2147483647
- #define STRSAFE_IGNORE_NULLS 0x00000100
- #define STRSAFE_FILL_BEHIND_NULL 0x00000200
- #define STRSAFE_FILL_ON_FAILURE 0x00000400
- #define STRSAFE_NULL_ON_FAILURE 0x00000800
- #define STRSAFE_NO_TRUNCATION 0x00001000
- #define STRSAFE_IGNORE_NULL_UNICODE_STRINGS 0x00010000
- #define STRSAFE_UNICODE_STRING_DEST_NULL_TERMINATED 0x00020000
- #define STRSAFE_VALID_FLAGS (0x000000FF | STRSAFE_IGNORE_NULLS | STRSAFE_FILL_BEHIND_NULL | STRSAFE_FILL_ON_FAILURE | STRSAFE_NULL_ON_FAILURE | STRSAFE_NO_TRUNCATION)
- #define STRSAFE_UNICODE_STRING_VALID_FLAGS (STRSAFE_VALID_FLAGS | STRSAFE_IGNORE_NULL_UNICODE_STRINGS | STRSAFE_UNICODE_STRING_DEST_NULL_TERMINATED)
- #define STRSAFE_FILL_BYTE(x) ((unsigned __LONG32)((x & 0x000000FF) | STRSAFE_FILL_BEHIND_NULL))
- #define STRSAFE_FAILURE_BYTE(x) ((unsigned __LONG32)((x & 0x000000FF) | STRSAFE_FILL_ON_FAILURE))
- #define STRSAFE_GET_FILL_PATTERN(dwFlags) ((int)(dwFlags & 0x000000FF))
- typedef char *NTSTRSAFE_PSTR;
- typedef const char *NTSTRSAFE_PCSTR;
- typedef wchar_t *NTSTRSAFE_PWSTR;
- typedef const wchar_t *NTSTRSAFE_PCWSTR;
- NTSTRSAFEDDI RtlStringCopyWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc);
- NTSTRSAFEDDI RtlStringCopyWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc);
- NTSTRSAFEDDI RtlStringCopyExWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCopyExWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCopyNWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToCopy);
- NTSTRSAFEDDI RtlStringCopyNWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToCopy);
- NTSTRSAFEDDI RtlStringCopyNExWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToCopy,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCopyNExWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToCopy,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCatWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc);
- NTSTRSAFEDDI RtlStringCatWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc);
- NTSTRSAFEDDI RtlStringCatExWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCatExWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCatNWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToAppend);
- NTSTRSAFEDDI RtlStringCatNWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToAppend);
- NTSTRSAFEDDI RtlStringCatNExWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToAppend,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCatNExWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToAppend,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringVPrintfWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszFormat,va_list argList);
- NTSTRSAFEDDI RtlStringVPrintfWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszFormat,va_list argList);
- NTSTRSAFEDDI RtlStringVPrintfExWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCSTR pszFormat,va_list argList);
- NTSTRSAFEDDI RtlStringVPrintfExWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCWSTR pszFormat,va_list argList);
- NTSTRSAFEDDI RtlStringLengthWorkerA(NTSTRSAFE_PCSTR psz,size_t cchMax,size_t *pcchLength);
- NTSTRSAFEDDI RtlStringLengthWorkerW(NTSTRSAFE_PCWSTR psz,size_t cchMax,size_t *pcchLength);
- #define RtlStringCchCopy __MINGW_NAME_AW(RtlStringCchCopy)
- NTSTRSAFEDDI RtlStringCchCopyA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc);
- NTSTRSAFEDDI RtlStringCchCopyW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc);
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCchCopyA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc) {
- return (cchDest > NTSTRSAFE_MAX_CCH ? STATUS_INVALID_PARAMETER : RtlStringCopyWorkerA(pszDest,cchDest,pszSrc));
- }
- NTSTRSAFEDDI RtlStringCchCopyW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc) {
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCopyWorkerW(pszDest,cchDest,pszSrc);
- }
- #endif /* !__STRSAFE__NO_INLINE */
- #define RtlStringCbCopy __MINGW_NAME_AW(RtlStringCbCopy)
- NTSTRSAFEDDI RtlStringCbCopyA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc);
- NTSTRSAFEDDI RtlStringCbCopyW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc);
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCbCopyA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc) {
- if(cbDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCopyWorkerA(pszDest,cbDest,pszSrc);
- }
- NTSTRSAFEDDI RtlStringCbCopyW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc) {
- size_t cchDest = cbDest / sizeof(wchar_t);
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCopyWorkerW(pszDest,cchDest,pszSrc);
- }
- #endif /* !__STRSAFE__NO_INLINE */
- #define RtlStringCchCopyEx __MINGW_NAME_AW(RtlStringCchCopyEx)
- NTSTRSAFEDDI RtlStringCchCopyExA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCchCopyExW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCchCopyExA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCopyExWorkerA(pszDest,cchDest,cchDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags);
- }
- NTSTRSAFEDDI RtlStringCchCopyExW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- size_t cbDest;
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- cbDest = cchDest * sizeof(wchar_t);
- return RtlStringCopyExWorkerW(pszDest,cchDest,cbDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags);
- }
- #endif /* !__STRSAFE__NO_INLINE */
- #define RtlStringCbCopyEx __MINGW_NAME_AW(RtlStringCbCopyEx)
- NTSTRSAFEDDI RtlStringCbCopyExA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCbCopyExW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags);
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCbCopyExA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr;
- size_t cchRemaining = 0;
- if(cbDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- hr = RtlStringCopyExWorkerA(pszDest,cbDest,cbDest,pszSrc,ppszDestEnd,&cchRemaining,dwFlags);
- if(NT_SUCCESS(hr) || hr == STATUS_BUFFER_OVERFLOW) {
- if(pcbRemaining)
- *pcbRemaining = (cchRemaining*sizeof(char)) + (cbDest % sizeof(char));
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCbCopyExW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr;
- size_t cchDest = cbDest / sizeof(wchar_t);
- size_t cchRemaining = 0;
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- hr = RtlStringCopyExWorkerW(pszDest,cchDest,cbDest,pszSrc,ppszDestEnd,&cchRemaining,dwFlags);
- if(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(pcbRemaining)
- *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
- }
- return hr;
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCchCopyNA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToCopy);
- NTSTRSAFEDDI RtlStringCchCopyNW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToCopy);
- #define RtlStringCchCopyN __MINGW_NAME_AW(RtlStringCchCopyN)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCchCopyNA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToCopy) {
- if(cchDest > NTSTRSAFE_MAX_CCH || cchToCopy > NTSTRSAFE_MAX_CCH)
- return STATUS_INVALID_PARAMETER;
- return RtlStringCopyNWorkerA(pszDest,cchDest,pszSrc,cchToCopy);
- }
- NTSTRSAFEDDI RtlStringCchCopyNW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToCopy) {
- if(cchDest > NTSTRSAFE_MAX_CCH || cchToCopy > NTSTRSAFE_MAX_CCH)
- return STATUS_INVALID_PARAMETER;
- return RtlStringCopyNWorkerW(pszDest,cchDest,pszSrc,cchToCopy);
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCbCopyNA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,size_t cbToCopy);
- NTSTRSAFEDDI RtlStringCbCopyNW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,size_t cbToCopy);
- #define RtlStringCbCopyN __MINGW_NAME_AW(RtlStringCbCopyN)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCbCopyNA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,size_t cbToCopy) {
- if(cbDest > NTSTRSAFE_MAX_CCH || cbToCopy > NTSTRSAFE_MAX_CCH)
- return STATUS_INVALID_PARAMETER;
- return RtlStringCopyNWorkerA(pszDest,cbDest,pszSrc,cbToCopy);
- }
- NTSTRSAFEDDI RtlStringCbCopyNW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,size_t cbToCopy) {
- size_t cchDest = cbDest / sizeof(wchar_t);
- size_t cchToCopy = cbToCopy / sizeof(wchar_t);
- if(cchDest > NTSTRSAFE_MAX_CCH || cchToCopy > NTSTRSAFE_MAX_CCH)
- return STATUS_INVALID_PARAMETER;
- return RtlStringCopyNWorkerW(pszDest,cchDest,pszSrc,cchToCopy);
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCchCopyNExA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToCopy,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCchCopyNExW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToCopy,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- #define RtlStringCchCopyNEx __MINGW_NAME_AW(RtlStringCchCopyNEx)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCchCopyNExA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToCopy,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCopyNExWorkerA(pszDest,cchDest,cchDest,pszSrc,cchToCopy,ppszDestEnd,pcchRemaining,dwFlags);
- }
- NTSTRSAFEDDI RtlStringCchCopyNExW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToCopy,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCopyNExWorkerW(pszDest,cchDest,cchDest * sizeof(wchar_t),pszSrc,cchToCopy,ppszDestEnd,pcchRemaining,dwFlags);
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCbCopyNExA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,size_t cbToCopy,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCbCopyNExW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,size_t cbToCopy,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags);
- #define RtlStringCbCopyNEx __MINGW_NAME_AW(RtlStringCbCopyNEx)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCbCopyNExA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,size_t cbToCopy,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr;
- size_t cchRemaining = 0;
- if(cbDest > NTSTRSAFE_MAX_CCH)
- hr = STATUS_INVALID_PARAMETER;
- else
- hr = RtlStringCopyNExWorkerA(pszDest,cbDest,cbDest,pszSrc,cbToCopy,ppszDestEnd,&cchRemaining,dwFlags);
- if((NT_SUCCESS(hr) || hr == STATUS_BUFFER_OVERFLOW) && pcbRemaining)
- *pcbRemaining = cchRemaining;
- return hr;
- }
- NTSTRSAFEDDI RtlStringCbCopyNExW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,size_t cbToCopy,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr;
- size_t cchDest;
- size_t cchToCopy;
- size_t cchRemaining = 0;
- cchDest = cbDest / sizeof(wchar_t);
- cchToCopy = cbToCopy / sizeof(wchar_t);
- if(cchDest > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else hr = RtlStringCopyNExWorkerW(pszDest,cchDest,cbDest,pszSrc,cchToCopy,ppszDestEnd,&cchRemaining,dwFlags);
- if((NT_SUCCESS(hr) || hr == STATUS_BUFFER_OVERFLOW) && pcbRemaining)
- *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
- return hr;
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCchCatA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc);
- NTSTRSAFEDDI RtlStringCchCatW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc);
- #define RtlStringCchCat __MINGW_NAME_AW(RtlStringCchCat)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCchCatA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc) {
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCatWorkerA(pszDest,cchDest,pszSrc);
- }
- NTSTRSAFEDDI RtlStringCchCatW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc) {
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCatWorkerW(pszDest,cchDest,pszSrc);
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCbCatA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc);
- NTSTRSAFEDDI RtlStringCbCatW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc);
- #define RtlStringCbCat __MINGW_NAME_AW(RtlStringCbCat)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCbCatA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc) {
- if(cbDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCatWorkerA(pszDest,cbDest,pszSrc);
- }
- NTSTRSAFEDDI RtlStringCbCatW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc) {
- size_t cchDest = cbDest / sizeof(wchar_t);
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCatWorkerW(pszDest,cchDest,pszSrc);
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCchCatExA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCchCatExW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- #define RtlStringCchCatEx __MINGW_NAME_AW(RtlStringCchCatEx)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCchCatExA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCatExWorkerA(pszDest,cchDest,cchDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags);
- }
- NTSTRSAFEDDI RtlStringCchCatExW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- size_t cbDest = cchDest*sizeof(wchar_t);
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCatExWorkerW(pszDest,cchDest,cbDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags);
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCbCatExA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCbCatExW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags);
- #define RtlStringCbCatEx __MINGW_NAME_AW(RtlStringCbCatEx)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCbCatExA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr;
- size_t cchRemaining = 0;
- if(cbDest > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else hr = RtlStringCatExWorkerA(pszDest,cbDest,cbDest,pszSrc,ppszDestEnd,&cchRemaining,dwFlags);
- if((NT_SUCCESS(hr) || hr == STATUS_BUFFER_OVERFLOW) && pcbRemaining)
- *pcbRemaining = (cchRemaining*sizeof(char)) + (cbDest % sizeof(char));
- return hr;
- }
- NTSTRSAFEDDI RtlStringCbCatExW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr;
- size_t cchDest = cbDest / sizeof(wchar_t);
- size_t cchRemaining = 0;
- if(cchDest > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else hr = RtlStringCatExWorkerW(pszDest,cchDest,cbDest,pszSrc,ppszDestEnd,&cchRemaining,dwFlags);
- if((NT_SUCCESS(hr) || hr == STATUS_BUFFER_OVERFLOW) && pcbRemaining)
- *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
- return hr;
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCchCatNA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToAppend);
- NTSTRSAFEDDI RtlStringCchCatNW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToAppend);
- #define RtlStringCchCatN __MINGW_NAME_AW(RtlStringCchCatN)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCchCatNA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToAppend) {
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCatNWorkerA(pszDest,cchDest,pszSrc,cchToAppend);
- }
- NTSTRSAFEDDI RtlStringCchCatNW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToAppend) {
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCatNWorkerW(pszDest,cchDest,pszSrc,cchToAppend);
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCbCatNA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,size_t cbToAppend);
- NTSTRSAFEDDI RtlStringCbCatNW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,size_t cbToAppend);
- #define RtlStringCbCatN __MINGW_NAME_AW(RtlStringCbCatN)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCbCatNA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,size_t cbToAppend) {
- if(cbDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCatNWorkerA(pszDest,cbDest,pszSrc,cbToAppend);
- }
- NTSTRSAFEDDI RtlStringCbCatNW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,size_t cbToAppend) {
- size_t cchDest = cbDest / sizeof(wchar_t);
- size_t cchToAppend = cbToAppend / sizeof(wchar_t);
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCatNWorkerW(pszDest,cchDest,pszSrc,cchToAppend);
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCchCatNExA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToAppend,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCchCatNExW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToAppend,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags);
- #define RtlStringCchCatNEx __MINGW_NAME_AW(RtlStringCchCatNEx)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCchCatNExA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToAppend,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCatNExWorkerA(pszDest,cchDest,cchDest,pszSrc,cchToAppend,ppszDestEnd,pcchRemaining,dwFlags);
- }
- NTSTRSAFEDDI RtlStringCchCatNExW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToAppend,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringCatNExWorkerW(pszDest,cchDest,(cchDest*sizeof(wchar_t)),pszSrc,cchToAppend,ppszDestEnd,pcchRemaining,dwFlags);
- }
- #endif
- NTSTRSAFEDDI RtlStringCbCatNExA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,size_t cbToAppend,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags);
- NTSTRSAFEDDI RtlStringCbCatNExW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,size_t cbToAppend,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags);
- #define RtlStringCbCatNEx __MINGW_NAME_AW(RtlStringCbCatNEx)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCbCatNExA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,size_t cbToAppend,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr;
- size_t cchRemaining = 0;
- if(cbDest > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else hr = RtlStringCatNExWorkerA(pszDest,cbDest,cbDest,pszSrc,cbToAppend,ppszDestEnd,&cchRemaining,dwFlags);
- if((NT_SUCCESS(hr) || hr == STATUS_BUFFER_OVERFLOW) && pcbRemaining)
- *pcbRemaining = (cchRemaining*sizeof(char)) + (cbDest % sizeof(char));
- return hr;
- }
- NTSTRSAFEDDI RtlStringCbCatNExW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,size_t cbToAppend,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr;
- size_t cchDest = cbDest / sizeof(wchar_t);
- size_t cchToAppend = cbToAppend / sizeof(wchar_t);
- size_t cchRemaining = 0;
- if(cchDest > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else hr = RtlStringCatNExWorkerW(pszDest,cchDest,cbDest,pszSrc,cchToAppend,ppszDestEnd,&cchRemaining,dwFlags);
- if((NT_SUCCESS(hr) || hr == STATUS_BUFFER_OVERFLOW) && pcbRemaining)
- *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
- return hr;
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCchVPrintfA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszFormat,va_list argList);
- NTSTRSAFEDDI RtlStringCchVPrintfW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszFormat,va_list argList);
- #define RtlStringCchVPrintf __MINGW_NAME_AW(RtlStringCchVPrintf)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCchVPrintfA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszFormat,va_list argList) {
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringVPrintfWorkerA(pszDest,cchDest,pszFormat,argList);
- }
- NTSTRSAFEDDI RtlStringCchVPrintfW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszFormat,va_list argList) {
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList);
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCbVPrintfA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszFormat,va_list argList);
- NTSTRSAFEDDI RtlStringCbVPrintfW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszFormat,va_list argList);
- #define RtlStringCbVPrintf __MINGW_NAME_AW(RtlStringCbVPrintf)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCbVPrintfA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszFormat,va_list argList) {
- if(cbDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringVPrintfWorkerA(pszDest,cbDest,pszFormat,argList);
- }
- NTSTRSAFEDDI RtlStringCbVPrintfW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszFormat,va_list argList) {
- size_t cchDest = cbDest / sizeof(wchar_t);
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- return RtlStringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList);
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDIV RtlStringCchPrintfA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszFormat,...);
- NTSTRSAFEDDIV RtlStringCchPrintfW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszFormat,...);
- #define RtlStringCchPrintf __MINGW_NAME_AW(RtlStringCchPrintf)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDIV RtlStringCchPrintfA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszFormat,...) {
- NTSTATUS hr;
- va_list argList;
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- va_start(argList,pszFormat);
- hr = RtlStringVPrintfWorkerA(pszDest,cchDest,pszFormat,argList);
- va_end(argList);
- return hr;
- }
- NTSTRSAFEDDIV RtlStringCchPrintfW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszFormat,...) {
- NTSTATUS hr;
- va_list argList;
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- va_start(argList,pszFormat);
- hr = RtlStringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList);
- va_end(argList);
- return hr;
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDIV RtlStringCbPrintfA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszFormat,...);
- NTSTRSAFEDDIV RtlStringCbPrintfW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszFormat,...);
- #define RtlStringCbPrintf __MINGW_NAME_AW(RtlStringCbPrintf)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDIV RtlStringCbPrintfA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PCSTR pszFormat,...) {
- NTSTATUS hr;
- va_list argList;
- if(cbDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- va_start(argList,pszFormat);
- hr = RtlStringVPrintfWorkerA(pszDest,cbDest,pszFormat,argList);
- va_end(argList);
- return hr;
- }
- NTSTRSAFEDDIV RtlStringCbPrintfW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PCWSTR pszFormat,...) {
- NTSTATUS hr;
- va_list argList;
- size_t cchDest = cbDest / sizeof(wchar_t);
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- va_start(argList,pszFormat);
- hr = RtlStringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList);
- va_end(argList);
- return hr;
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDIV RtlStringCchPrintfExA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCSTR pszFormat,...);
- NTSTRSAFEDDIV RtlStringCchPrintfExW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCWSTR pszFormat,...);
- #define RtlStringCchPrintfEx __MINGW_NAME_AW(RtlStringCchPrintfEx)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDIV RtlStringCchPrintfExA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCSTR pszFormat,...) {
- NTSTATUS hr;
- va_list argList;
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- va_start(argList,pszFormat);
- hr = RtlStringVPrintfExWorkerA(pszDest,cchDest,cchDest,ppszDestEnd,pcchRemaining,dwFlags,pszFormat,argList);
- va_end(argList);
- return hr;
- }
- NTSTRSAFEDDIV RtlStringCchPrintfExW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCWSTR pszFormat,...) {
- NTSTATUS hr;
- size_t cbDest = cchDest * sizeof(wchar_t);
- va_list argList;
- if(cchDest > NTSTRSAFE_MAX_CCH) return STATUS_INVALID_PARAMETER;
- va_start(argList,pszFormat);
- hr = RtlStringVPrintfExWorkerW(pszDest,cchDest,cbDest,ppszDestEnd,pcchRemaining,dwFlags,pszFormat,argList);
- va_end(argList);
- return hr;
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDIV RtlStringCbPrintfExA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCSTR pszFormat,...);
- NTSTRSAFEDDIV RtlStringCbPrintfExW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCWSTR pszFormat,...);
- #define RtlStringCbPrintfEx __MINGW_NAME_AW(RtlStringCbPrintfEx)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDIV RtlStringCbPrintfExA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCSTR pszFormat,...) {
- NTSTATUS hr;
- size_t cchDest;
- size_t cchRemaining = 0;
- cchDest = cbDest / sizeof(char);
- if(cchDest > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else {
- va_list argList;
- va_start(argList,pszFormat);
- hr = RtlStringVPrintfExWorkerA(pszDest,cchDest,cbDest,ppszDestEnd,&cchRemaining,dwFlags,pszFormat,argList);
- va_end(argList);
- }
- if(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(pcbRemaining) {
- *pcbRemaining = (cchRemaining*sizeof(char)) + (cbDest % sizeof(char));
- }
- }
- return hr;
- }
- NTSTRSAFEDDIV RtlStringCbPrintfExW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCWSTR pszFormat,...) {
- NTSTATUS hr;
- size_t cchDest;
- size_t cchRemaining = 0;
- cchDest = cbDest / sizeof(wchar_t);
- if(cchDest > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else {
- va_list argList;
- va_start(argList,pszFormat);
- hr = RtlStringVPrintfExWorkerW(pszDest,cchDest,cbDest,ppszDestEnd,&cchRemaining,dwFlags,pszFormat,argList);
- va_end(argList);
- }
- if(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(pcbRemaining) {
- *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
- }
- }
- return hr;
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCchVPrintfExA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCSTR pszFormat,va_list argList);
- NTSTRSAFEDDI RtlStringCchVPrintfExW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCWSTR pszFormat,va_list argList);
- #define RtlStringCchVPrintfEx __MINGW_NAME_AW(RtlStringCchVPrintfEx)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCchVPrintfExA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCSTR pszFormat,va_list argList) {
- NTSTATUS hr;
- if(cchDest > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else {
- size_t cbDest;
- cbDest = cchDest*sizeof(char);
- hr = RtlStringVPrintfExWorkerA(pszDest,cchDest,cbDest,ppszDestEnd,pcchRemaining,dwFlags,pszFormat,argList);
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCchVPrintfExW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCWSTR pszFormat,va_list argList) {
- NTSTATUS hr;
- if(cchDest > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else {
- size_t cbDest;
- cbDest = cchDest*sizeof(wchar_t);
- hr = RtlStringVPrintfExWorkerW(pszDest,cchDest,cbDest,ppszDestEnd,pcchRemaining,dwFlags,pszFormat,argList);
- }
- return hr;
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCbVPrintfExA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCSTR pszFormat,va_list argList);
- NTSTRSAFEDDI RtlStringCbVPrintfExW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCWSTR pszFormat,va_list argList);
- #define RtlStringCbVPrintfEx __MINGW_NAME_AW(RtlStringCbVPrintfEx)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCbVPrintfExA(NTSTRSAFE_PSTR pszDest,size_t cbDest,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCSTR pszFormat,va_list argList) {
- NTSTATUS hr;
- size_t cchDest;
- size_t cchRemaining = 0;
- cchDest = cbDest / sizeof(char);
- if(cchDest > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else hr = RtlStringVPrintfExWorkerA(pszDest,cchDest,cbDest,ppszDestEnd,&cchRemaining,dwFlags,pszFormat,argList);
- if(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(pcbRemaining) {
- *pcbRemaining = (cchRemaining*sizeof(char)) + (cbDest % sizeof(char));
- }
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCbVPrintfExW(NTSTRSAFE_PWSTR pszDest,size_t cbDest,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcbRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCWSTR pszFormat,va_list argList) {
- NTSTATUS hr;
- size_t cchDest;
- size_t cchRemaining = 0;
- cchDest = cbDest / sizeof(wchar_t);
- if(cchDest > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else hr = RtlStringVPrintfExWorkerW(pszDest,cchDest,cbDest,ppszDestEnd,&cchRemaining,dwFlags,pszFormat,argList);
- if(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(pcbRemaining) {
- *pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
- }
- }
- return hr;
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCchLengthA(NTSTRSAFE_PCSTR psz,size_t cchMax,size_t *pcchLength);
- NTSTRSAFEDDI RtlStringCchLengthW(NTSTRSAFE_PCWSTR psz,size_t cchMax,size_t *pcchLength);
- #define RtlStringCchLength __MINGW_NAME_AW(RtlStringCchLength)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCchLengthA(NTSTRSAFE_PCSTR psz,size_t cchMax,size_t *pcchLength) {
- NTSTATUS hr;
- if(!psz || (cchMax > NTSTRSAFE_MAX_CCH)) hr = STATUS_INVALID_PARAMETER;
- else hr = RtlStringLengthWorkerA(psz,cchMax,pcchLength);
- if(!NT_SUCCESS(hr) && pcchLength) {
- *pcchLength = 0;
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCchLengthW(NTSTRSAFE_PCWSTR psz,size_t cchMax,size_t *pcchLength) {
- NTSTATUS hr;
- if(!psz || (cchMax > NTSTRSAFE_MAX_CCH)) hr = STATUS_INVALID_PARAMETER;
- else hr = RtlStringLengthWorkerW(psz,cchMax,pcchLength);
- if(!NT_SUCCESS(hr) && pcchLength) {
- *pcchLength = 0;
- }
- return hr;
- }
- #endif /* !__STRSAFE__NO_INLINE */
- NTSTRSAFEDDI RtlStringCbLengthA(NTSTRSAFE_PCSTR psz,size_t cbMax,size_t *pcbLength);
- NTSTRSAFEDDI RtlStringCbLengthW(NTSTRSAFE_PCWSTR psz,size_t cbMax,size_t *pcbLength);
- #define RtlStringCbLength __MINGW_NAME_AW(RtlStringCbLength)
- #ifndef __STRSAFE__NO_INLINE
- NTSTRSAFEDDI RtlStringCbLengthA(NTSTRSAFE_PCSTR psz,size_t cbMax,size_t *pcbLength) {
- NTSTATUS hr;
- size_t cchMax;
- size_t cchLength = 0;
- cchMax = cbMax / sizeof(char);
- if(!psz || (cchMax > NTSTRSAFE_MAX_CCH)) hr = STATUS_INVALID_PARAMETER;
- else hr = RtlStringLengthWorkerA(psz,cchMax,&cchLength);
- if(pcbLength) {
- if(NT_SUCCESS(hr)) {
- *pcbLength = cchLength*sizeof(char);
- } else {
- *pcbLength = 0;
- }
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCbLengthW(NTSTRSAFE_PCWSTR psz,size_t cbMax,size_t *pcbLength) {
- NTSTATUS hr;
- size_t cchMax;
- size_t cchLength = 0;
- cchMax = cbMax / sizeof(wchar_t);
- if(!psz || (cchMax > NTSTRSAFE_MAX_CCH)) hr = STATUS_INVALID_PARAMETER;
- else hr = RtlStringLengthWorkerW(psz,cchMax,&cchLength);
- if(pcbLength) {
- if(NT_SUCCESS(hr)) {
- *pcbLength = cchLength*sizeof(wchar_t);
- } else {
- *pcbLength = 0;
- }
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCopyWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc) {
- NTSTATUS hr = STATUS_SUCCESS;
- if(cchDest==0) hr = STATUS_INVALID_PARAMETER;
- else {
- while(cchDest && (*pszSrc!='\0')) {
- *pszDest++ = *pszSrc++;
- cchDest--;
- }
- if(cchDest==0) {
- pszDest--;
- hr = STATUS_BUFFER_OVERFLOW;
- }
- *pszDest= '\0';
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCopyWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc) {
- NTSTATUS hr = STATUS_SUCCESS;
- if(cchDest==0) hr = STATUS_INVALID_PARAMETER;
- else {
- while(cchDest && (*pszSrc!=L'\0')) {
- *pszDest++ = *pszSrc++;
- cchDest--;
- }
- if(cchDest==0) {
- pszDest--;
- hr = STATUS_BUFFER_OVERFLOW;
- }
- *pszDest= L'\0';
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCopyExWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr = STATUS_SUCCESS;
- NTSTRSAFE_PSTR pszDestEnd = pszDest;
- size_t cchRemaining = 0;
- if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STATUS_INVALID_PARAMETER;
- else {
- if(dwFlags & STRSAFE_IGNORE_NULLS) {
- if(!pszDest) {
- if((cchDest!=0) || (cbDest!=0)) hr = STATUS_INVALID_PARAMETER;
- }
- if(!pszSrc) pszSrc = "";
- }
- if(NT_SUCCESS(hr)) {
- if(cchDest==0) {
- pszDestEnd = pszDest;
- cchRemaining = 0;
- if(*pszSrc!='\0') {
- if(!pszDest) hr = STATUS_INVALID_PARAMETER;
- else hr = STATUS_BUFFER_OVERFLOW;
- }
- } 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 = STATUS_BUFFER_OVERFLOW;
- }
- *pszDestEnd = '\0';
- }
- }
- }
- if(!NT_SUCCESS(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(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
- if(pcchRemaining) *pcchRemaining = cchRemaining;
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCopyExWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr = STATUS_SUCCESS;
- NTSTRSAFE_PWSTR pszDestEnd = pszDest;
- size_t cchRemaining = 0;
- if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STATUS_INVALID_PARAMETER;
- else {
- if(dwFlags & STRSAFE_IGNORE_NULLS) {
- if(!pszDest) {
- if((cchDest!=0) || (cbDest!=0)) hr = STATUS_INVALID_PARAMETER;
- }
- if(!pszSrc) pszSrc = L"";
- }
- if(NT_SUCCESS(hr)) {
- if(cchDest==0) {
- pszDestEnd = pszDest;
- cchRemaining = 0;
- if(*pszSrc!=L'\0') {
- if(!pszDest) hr = STATUS_INVALID_PARAMETER;
- else hr = STATUS_BUFFER_OVERFLOW;
- }
- } 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 = STATUS_BUFFER_OVERFLOW;
- }
- *pszDestEnd = L'\0';
- }
- }
- }
- if(!NT_SUCCESS(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(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
- if(pcchRemaining) *pcchRemaining = cchRemaining;
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCopyNWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,size_t cchSrc) {
- NTSTATUS hr = STATUS_SUCCESS;
- if(cchDest==0) hr = STATUS_INVALID_PARAMETER;
- else {
- while(cchDest && cchSrc && (*pszSrc!='\0')) {
- *pszDest++ = *pszSrc++;
- cchDest--;
- cchSrc--;
- }
- if(cchDest==0) {
- pszDest--;
- hr = STATUS_BUFFER_OVERFLOW;
- }
- *pszDest= '\0';
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCopyNWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToCopy) {
- NTSTATUS hr = STATUS_SUCCESS;
- if(cchDest==0) hr = STATUS_INVALID_PARAMETER;
- else {
- while(cchDest && cchToCopy && (*pszSrc!=L'\0')) {
- *pszDest++ = *pszSrc++;
- cchDest--;
- cchToCopy--;
- }
- if(cchDest==0) {
- pszDest--;
- hr = STATUS_BUFFER_OVERFLOW;
- }
- *pszDest= L'\0';
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCopyNExWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToCopy,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr = STATUS_SUCCESS;
- NTSTRSAFE_PSTR pszDestEnd = pszDest;
- size_t cchRemaining = 0;
- if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STATUS_INVALID_PARAMETER;
- else if(cchToCopy > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else {
- if(dwFlags & STRSAFE_IGNORE_NULLS) {
- if(!pszDest) {
- if((cchDest!=0) || (cbDest!=0)) hr = STATUS_INVALID_PARAMETER;
- }
- if(!pszSrc) pszSrc = "";
- }
- if(NT_SUCCESS(hr)) {
- if(cchDest==0) {
- pszDestEnd = pszDest;
- cchRemaining = 0;
- if((cchToCopy!=0) && (*pszSrc!='\0')) {
- if(!pszDest) hr = STATUS_INVALID_PARAMETER;
- else hr = STATUS_BUFFER_OVERFLOW;
- }
- } 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 = STATUS_BUFFER_OVERFLOW;
- }
- *pszDestEnd = '\0';
- }
- }
- }
- if(!NT_SUCCESS(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(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
- if(pcchRemaining) *pcchRemaining = cchRemaining;
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCopyNExWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToCopy,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr = STATUS_SUCCESS;
- NTSTRSAFE_PWSTR pszDestEnd = pszDest;
- size_t cchRemaining = 0;
- if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STATUS_INVALID_PARAMETER;
- else if(cchToCopy > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else {
- if(dwFlags & STRSAFE_IGNORE_NULLS) {
- if(!pszDest) {
- if((cchDest!=0) || (cbDest!=0)) hr = STATUS_INVALID_PARAMETER;
- }
- if(!pszSrc) pszSrc = L"";
- }
- if(NT_SUCCESS(hr)) {
- if(cchDest==0) {
- pszDestEnd = pszDest;
- cchRemaining = 0;
- if((cchToCopy!=0) && (*pszSrc!=L'\0')) {
- if(!pszDest) hr = STATUS_INVALID_PARAMETER;
- else hr = STATUS_BUFFER_OVERFLOW;
- }
- } 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 = STATUS_BUFFER_OVERFLOW;
- }
- *pszDestEnd = L'\0';
- }
- }
- }
- if(!NT_SUCCESS(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(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
- if(pcchRemaining) *pcchRemaining = cchRemaining;
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCatWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc) {
- NTSTATUS hr;
- size_t cchDestLength;
- hr = RtlStringLengthWorkerA(pszDest,cchDest,&cchDestLength);
- if(NT_SUCCESS(hr)) hr = RtlStringCopyWorkerA(pszDest + cchDestLength,cchDest - cchDestLength,pszSrc);
- return hr;
- }
- NTSTRSAFEDDI RtlStringCatWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc) {
- NTSTATUS hr;
- size_t cchDestLength;
- hr = RtlStringLengthWorkerW(pszDest,cchDest,&cchDestLength);
- if(NT_SUCCESS(hr)) hr = RtlStringCopyWorkerW(pszDest + cchDestLength,cchDest - cchDestLength,pszSrc);
- return hr;
- }
- NTSTRSAFEDDI RtlStringCatExWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr = STATUS_SUCCESS;
- NTSTRSAFE_PSTR pszDestEnd = pszDest;
- size_t cchRemaining = 0;
- if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STATUS_INVALID_PARAMETER;
- else {
- size_t cchDestLength;
- if(dwFlags & STRSAFE_IGNORE_NULLS) {
- if(!pszDest) {
- if((cchDest==0) && (cbDest==0)) cchDestLength = 0;
- else hr = STATUS_INVALID_PARAMETER;
- } else {
- hr = RtlStringLengthWorkerA(pszDest,cchDest,&cchDestLength);
- if(NT_SUCCESS(hr)) {
- pszDestEnd = pszDest + cchDestLength;
- cchRemaining = cchDest - cchDestLength;
- }
- }
- if(!pszSrc) pszSrc = "";
- } else {
- hr = RtlStringLengthWorkerA(pszDest,cchDest,&cchDestLength);
- if(NT_SUCCESS(hr)) {
- pszDestEnd = pszDest + cchDestLength;
- cchRemaining = cchDest - cchDestLength;
- }
- }
- if(NT_SUCCESS(hr)) {
- if(cchDest==0) {
- if(*pszSrc!='\0') {
- if(!pszDest) hr = STATUS_INVALID_PARAMETER;
- else hr = STATUS_BUFFER_OVERFLOW;
- }
- } else hr = RtlStringCopyExWorkerA(pszDestEnd,cchRemaining,(cchRemaining*sizeof(char)) + (cbDest % sizeof(char)),pszSrc,&pszDestEnd,&cchRemaining,dwFlags & (~(STRSAFE_FILL_ON_FAILURE | STRSAFE_NULL_ON_FAILURE)));
- }
- }
- if(!NT_SUCCESS(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(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
- if(pcchRemaining) *pcchRemaining = cchRemaining;
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCatExWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr = STATUS_SUCCESS;
- NTSTRSAFE_PWSTR pszDestEnd = pszDest;
- size_t cchRemaining = 0;
- if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STATUS_INVALID_PARAMETER;
- else {
- size_t cchDestLength;
- if(dwFlags & STRSAFE_IGNORE_NULLS) {
- if(!pszDest) {
- if((cchDest==0) && (cbDest==0)) cchDestLength = 0;
- else hr = STATUS_INVALID_PARAMETER;
- } else {
- hr = RtlStringLengthWorkerW(pszDest,cchDest,&cchDestLength);
- if(NT_SUCCESS(hr)) {
- pszDestEnd = pszDest + cchDestLength;
- cchRemaining = cchDest - cchDestLength;
- }
- }
- if(!pszSrc) pszSrc = L"";
- } else {
- hr = RtlStringLengthWorkerW(pszDest,cchDest,&cchDestLength);
- if(NT_SUCCESS(hr)) {
- pszDestEnd = pszDest + cchDestLength;
- cchRemaining = cchDest - cchDestLength;
- }
- }
- if(NT_SUCCESS(hr)) {
- if(cchDest==0) {
- if(*pszSrc!=L'\0') {
- if(!pszDest) hr = STATUS_INVALID_PARAMETER;
- else hr = STATUS_BUFFER_OVERFLOW;
- }
- } else hr = RtlStringCopyExWorkerW(pszDestEnd,cchRemaining,(cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)),pszSrc,&pszDestEnd,&cchRemaining,dwFlags & (~(STRSAFE_FILL_ON_FAILURE | STRSAFE_NULL_ON_FAILURE)));
- }
- }
- if(!NT_SUCCESS(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(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
- if(pcchRemaining) *pcchRemaining = cchRemaining;
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCatNWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToAppend) {
- NTSTATUS hr;
- size_t cchDestLength;
- hr = RtlStringLengthWorkerA(pszDest,cchDest,&cchDestLength);
- if(NT_SUCCESS(hr)) hr = RtlStringCopyNWorkerA(pszDest + cchDestLength,cchDest - cchDestLength,pszSrc,cchToAppend);
- return hr;
- }
- NTSTRSAFEDDI RtlStringCatNWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToAppend) {
- NTSTATUS hr;
- size_t cchDestLength;
- hr = RtlStringLengthWorkerW(pszDest,cchDest,&cchDestLength);
- if(NT_SUCCESS(hr)) hr = RtlStringCopyNWorkerW(pszDest + cchDestLength,cchDest - cchDestLength,pszSrc,cchToAppend);
- return hr;
- }
- NTSTRSAFEDDI RtlStringCatNExWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCSTR pszSrc,size_t cchToAppend,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr = STATUS_SUCCESS;
- NTSTRSAFE_PSTR pszDestEnd = pszDest;
- size_t cchRemaining = 0;
- size_t cchDestLength = 0;
- if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STATUS_INVALID_PARAMETER;
- else if(cchToAppend > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else {
- if(dwFlags & STRSAFE_IGNORE_NULLS) {
- if(!pszDest) {
- if((cchDest==0) && (cbDest==0)) cchDestLength = 0;
- else hr = STATUS_INVALID_PARAMETER;
- } else {
- hr = RtlStringLengthWorkerA(pszDest,cchDest,&cchDestLength);
- if(NT_SUCCESS(hr)) {
- pszDestEnd = pszDest + cchDestLength;
- cchRemaining = cchDest - cchDestLength;
- }
- }
- if(!pszSrc) pszSrc = "";
- } else {
- hr = RtlStringLengthWorkerA(pszDest,cchDest,&cchDestLength);
- if(NT_SUCCESS(hr)) {
- pszDestEnd = pszDest + cchDestLength;
- cchRemaining = cchDest - cchDestLength;
- }
- }
- if(NT_SUCCESS(hr)) {
- if(cchDest==0) {
- if((cchToAppend!=0) && (*pszSrc!='\0')) {
- if(!pszDest) hr = STATUS_INVALID_PARAMETER;
- else hr = STATUS_BUFFER_OVERFLOW;
- }
- } else hr = RtlStringCopyNExWorkerA(pszDestEnd,cchRemaining,(cchRemaining*sizeof(char)) + (cbDest % sizeof(char)),pszSrc,cchToAppend,&pszDestEnd,&cchRemaining,dwFlags & (~(STRSAFE_FILL_ON_FAILURE | STRSAFE_NULL_ON_FAILURE)));
- }
- }
- if(!NT_SUCCESS(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(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
- if(pcchRemaining) *pcchRemaining = cchRemaining;
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringCatNExWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PCWSTR pszSrc,size_t cchToAppend,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags) {
- NTSTATUS hr = STATUS_SUCCESS;
- NTSTRSAFE_PWSTR pszDestEnd = pszDest;
- size_t cchRemaining = 0;
- size_t cchDestLength = 0;
- if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STATUS_INVALID_PARAMETER;
- else if(cchToAppend > NTSTRSAFE_MAX_CCH) hr = STATUS_INVALID_PARAMETER;
- else {
- if(dwFlags & STRSAFE_IGNORE_NULLS) {
- if(!pszDest) {
- if((cchDest==0) && (cbDest==0)) cchDestLength = 0;
- else hr = STATUS_INVALID_PARAMETER;
- } else {
- hr = RtlStringLengthWorkerW(pszDest,cchDest,&cchDestLength);
- if(NT_SUCCESS(hr)) {
- pszDestEnd = pszDest + cchDestLength;
- cchRemaining = cchDest - cchDestLength;
- }
- }
- if(!pszSrc) pszSrc = L"";
- } else {
- hr = RtlStringLengthWorkerW(pszDest,cchDest,&cchDestLength);
- if(NT_SUCCESS(hr)) {
- pszDestEnd = pszDest + cchDestLength;
- cchRemaining = cchDest - cchDestLength;
- }
- }
- if(NT_SUCCESS(hr)) {
- if(cchDest==0) {
- if((cchToAppend!=0) && (*pszSrc!=L'\0')) {
- if(!pszDest) hr = STATUS_INVALID_PARAMETER;
- else hr = STATUS_BUFFER_OVERFLOW;
- }
- } else hr = RtlStringCopyNExWorkerW(pszDestEnd,cchRemaining,(cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t)),pszSrc,cchToAppend,&pszDestEnd,&cchRemaining,dwFlags & (~(STRSAFE_FILL_ON_FAILURE | STRSAFE_NULL_ON_FAILURE)));
- }
- }
- if(!NT_SUCCESS(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(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
- if(pcchRemaining) *pcchRemaining = cchRemaining;
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringVPrintfWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,NTSTRSAFE_PCSTR pszFormat,va_list argList) {
- NTSTATUS hr = STATUS_SUCCESS;
- if(cchDest==0) hr = STATUS_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 = STATUS_BUFFER_OVERFLOW;
- } else if(((size_t)iRet)==cchMax) {
- pszDest += cchMax;
- *pszDest = '\0';
- }
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringVPrintfWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,NTSTRSAFE_PCWSTR pszFormat,va_list argList) {
- NTSTATUS hr = STATUS_SUCCESS;
- if(cchDest==0) hr = STATUS_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 = STATUS_BUFFER_OVERFLOW;
- } else if(((size_t)iRet)==cchMax) {
- pszDest += cchMax;
- *pszDest = L'\0';
- }
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringVPrintfExWorkerA(NTSTRSAFE_PSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCSTR pszFormat,va_list argList) {
- NTSTATUS hr = STATUS_SUCCESS;
- NTSTRSAFE_PSTR pszDestEnd = pszDest;
- size_t cchRemaining = 0;
- if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STATUS_INVALID_PARAMETER;
- else {
- if(dwFlags & STRSAFE_IGNORE_NULLS) {
- if(!pszDest) {
- if((cchDest!=0) || (cbDest!=0)) hr = STATUS_INVALID_PARAMETER;
- }
- if(!pszFormat) pszFormat = "";
- }
- if(NT_SUCCESS(hr)) {
- if(cchDest==0) {
- pszDestEnd = pszDest;
- cchRemaining = 0;
- if(*pszFormat!='\0') {
- if(!pszDest) hr = STATUS_INVALID_PARAMETER;
- else hr = STATUS_BUFFER_OVERFLOW;
- }
- } 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 = STATUS_BUFFER_OVERFLOW;
- } 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(!NT_SUCCESS(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(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
- if(pcchRemaining) *pcchRemaining = cchRemaining;
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringVPrintfExWorkerW(NTSTRSAFE_PWSTR pszDest,size_t cchDest,size_t cbDest,NTSTRSAFE_PWSTR *ppszDestEnd,size_t *pcchRemaining,unsigned __LONG32 dwFlags,NTSTRSAFE_PCWSTR pszFormat,va_list argList) {
- NTSTATUS hr = STATUS_SUCCESS;
- NTSTRSAFE_PWSTR pszDestEnd = pszDest;
- size_t cchRemaining = 0;
- if(dwFlags & (~STRSAFE_VALID_FLAGS)) hr = STATUS_INVALID_PARAMETER;
- else {
- if(dwFlags & STRSAFE_IGNORE_NULLS) {
- if(!pszDest) {
- if((cchDest!=0) || (cbDest!=0)) hr = STATUS_INVALID_PARAMETER;
- }
- if(!pszFormat) pszFormat = L"";
- }
- if(NT_SUCCESS(hr)) {
- if(cchDest==0) {
- pszDestEnd = pszDest;
- cchRemaining = 0;
- if(*pszFormat!=L'\0') {
- if(!pszDest) hr = STATUS_INVALID_PARAMETER;
- else hr = STATUS_BUFFER_OVERFLOW;
- }
- } 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 = STATUS_BUFFER_OVERFLOW;
- } 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(!NT_SUCCESS(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(NT_SUCCESS(hr) || (hr==STATUS_BUFFER_OVERFLOW)) {
- if(ppszDestEnd) *ppszDestEnd = pszDestEnd;
- if(pcchRemaining) *pcchRemaining = cchRemaining;
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringLengthWorkerA(NTSTRSAFE_PCSTR psz,size_t cchMax,size_t *pcchLength) {
- NTSTATUS hr = STATUS_SUCCESS;
- size_t cchMaxPrev = cchMax;
- while(cchMax && (*psz!='\0')) {
- psz++;
- cchMax--;
- }
- if(cchMax==0) hr = STATUS_INVALID_PARAMETER;
- if(pcchLength) {
- if(NT_SUCCESS(hr)) *pcchLength = cchMaxPrev - cchMax;
- else *pcchLength = 0;
- }
- return hr;
- }
- NTSTRSAFEDDI RtlStringLengthWorkerW(NTSTRSAFE_PCWSTR psz,size_t cchMax,size_t *pcchLength) {
- NTSTATUS hr = STATUS_SUCCESS;
- size_t cchMaxPrev = cchMax;
- while(cchMax && (*psz!=L'\0')) {
- psz++;
- cchMax--;
- }
- if(cchMax==0) hr = STATUS_INVALID_PARAMETER;
- if(pcchLength) {
- if(NT_SUCCESS(hr)) *pcchLength = cchMaxPrev - cchMax;
- else *pcchLength = 0;
- }
- return hr;
- }
- #endif /* !__STRSAFE__NO_INLINE */
- #define RtlStringCopyWorkerA RtlStringCopyWorkerA_instead_use_RtlStringCchCopyA_or_RtlStringCchCopyExA;
- #define RtlStringCopyWorkerW RtlStringCopyWorkerW_instead_use_RtlStringCchCopyW_or_RtlStringCchCopyExW;
- #define RtlStringCopyExWorkerA RtlStringCopyExWorkerA_instead_use_RtlStringCchCopyA_or_RtlStringCchCopyExA;
- #define RtlStringCopyExWorkerW RtlStringCopyExWorkerW_instead_use_RtlStringCchCopyW_or_RtlStringCchCopyExW;
- #define RtlStringCatWorkerA RtlStringCatWorkerA_instead_use_RtlStringCchCatA_or_RtlStringCchCatExA;
- #define RtlStringCatWorkerW RtlStringCatWorkerW_instead_use_RtlStringCchCatW_or_RtlStringCchCatExW;
- #define RtlStringCatExWorkerA RtlStringCatExWorkerA_instead_use_RtlStringCchCatA_or_RtlStringCchCatExA;
- #define RtlStringCatExWorkerW RtlStringCatExWorkerW_instead_use_RtlStringCchCatW_or_RtlStringCchCatExW;
- #define RtlStringCatNWorkerA RtlStringCatNWorkerA_instead_use_RtlStringCchCatNA_or_StrincCbCatNA;
- #define RtlStringCatNWorkerW RtlStringCatNWorkerW_instead_use_RtlStringCchCatNW_or_RtlStringCbCatNW;
- #define RtlStringCatNExWorkerA RtlStringCatNExWorkerA_instead_use_RtlStringCchCatNExA_or_RtlStringCbCatNExA;
- #define RtlStringCatNExWorkerW RtlStringCatNExWorkerW_instead_use_RtlStringCchCatNExW_or_RtlStringCbCatNExW;
- #define RtlStringVPrintfWorkerA RtlStringVPrintfWorkerA_instead_use_RtlStringCchVPrintfA_or_RtlStringCchVPrintfExA;
- #define RtlStringVPrintfWorkerW RtlStringVPrintfWorkerW_instead_use_RtlStringCchVPrintfW_or_RtlStringCchVPrintfExW;
- #define RtlStringVPrintfExWorkerA RtlStringVPrintfExWorkerA_instead_use_RtlStringCchVPrintfA_or_RtlStringCchVPrintfExA;
- #define RtlStringVPrintfExWorkerW RtlStringVPrintfExWorkerW_instead_use_RtlStringCchVPrintfW_or_RtlStringCchVPrintfExW;
- #define RtlStringLengthWorkerA RtlStringLengthWorkerA_instead_use_RtlStringCchLengthA_or_RtlStringCbLengthA;
- #define RtlStringLengthWorkerW RtlStringLengthWorkerW_instead_use_RtlStringCchLengthW_or_RtlStringCbLengthW;
- #endif
|