windows-nt/Source/XPSP1/NT/base/ntsetup/win95upg/inc/growbuf.h
2020-09-26 16:20:57 +08:00

221 lines
5.9 KiB
C

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
growbuf.h
Abstract:
Implements the GROWBUFFER data type, a dynamically allocated buffer
that grows (and potentially changes addresses). GROWBUFFERs are
typically used to maintain dynamic sized arrays, or multi-sz lists.
Author:
Jim Schmidt (jimschm) 25-Feb-1997
Revision History:
<alias> <date> <comments>
--*/
typedef struct {
PBYTE Buf;
DWORD Size;
DWORD End;
DWORD GrowSize;
DWORD UserIndex; // Unused by Growbuf. For caller use.
} GROWBUFFER, *PGROWBUFFER;
#define GROWBUF_INIT {NULL,0,0,0,0}
PBYTE
RealGrowBuffer (
IN OUT PGROWBUFFER GrowBuf,
IN DWORD SpaceNeeded
);
#define GrowBuffer(buf,size) SETTRACKCOMMENT(PBYTE,"GrowBuffer",__FILE__,__LINE__)\
RealGrowBuffer(buf,size)\
CLRTRACKCOMMENT
VOID
FreeGrowBuffer (
IN PGROWBUFFER GrowBuf
);
PBYTE
RealGrowBufferReserve (
IN OUT PGROWBUFFER GrowBuf,
IN DWORD SpaceNeeded
);
#define GrowBufferReserve(buf,size) SETTRACKCOMMENT(PBYTE,"GrowBufferReserve",__FILE__,__LINE__)\
RealGrowBufferReserve(buf,size)\
CLRTRACKCOMMENT
BOOL
RealMultiSzAppendA (
PGROWBUFFER GrowBuf,
PCSTR String
);
#define MultiSzAppendA(buf,str) SETTRACKCOMMENT(BOOL,"MultiSzAppendA",__FILE__,__LINE__)\
RealMultiSzAppendA(buf,str)\
CLRTRACKCOMMENT
BOOL
RealMultiSzAppendW (
PGROWBUFFER GrowBuf,
PCWSTR String
);
#define MultiSzAppendW(buf,str) SETTRACKCOMMENT(BOOL,"MultiSzAppendW",__FILE__,__LINE__)\
RealMultiSzAppendW(buf,str)\
CLRTRACKCOMMENT
BOOL
RealMultiSzAppendValA (
PGROWBUFFER GrowBuf,
PCSTR Key,
DWORD Val
);
#define MultiSzAppendValA(buf,k,v) SETTRACKCOMMENT(BOOL,"MultiSzAppendValA",__FILE__,__LINE__)\
RealMultiSzAppendValA(buf,k,v)\
CLRTRACKCOMMENT
BOOL
RealMultiSzAppendValW (
PGROWBUFFER GrowBuf,
PCWSTR Key,
DWORD Val
);
#define MultiSzAppendValW(buf,k,v) SETTRACKCOMMENT(BOOL,"MultiSzAppendValW",__FILE__,__LINE__)\
RealMultiSzAppendValW(buf,k,v)\
CLRTRACKCOMMENT
BOOL
RealMultiSzAppendStringA (
PGROWBUFFER GrowBuf,
PCSTR Key,
PCSTR Val
);
#define MultiSzAppendStringA(buf,k,v) SETTRACKCOMMENT(BOOL,"MultiSzAppendStringA",__FILE__,__LINE__)\
RealMultiSzAppendStringA(buf,k,v)\
CLRTRACKCOMMENT
BOOL
RealMultiSzAppendStringW (
PGROWBUFFER GrowBuf,
PCWSTR Key,
PCWSTR Val
);
#define MultiSzAppendStringW(buf,k,v) SETTRACKCOMMENT(BOOL,"MultiSzAppendStringW",__FILE__,__LINE__)\
RealMultiSzAppendStringW(buf,k,v)\
CLRTRACKCOMMENT
BOOL
RealGrowBufAppendDword (
PGROWBUFFER GrowBuf,
DWORD d
);
#define GrowBufAppendDword(buf,d) SETTRACKCOMMENT(BOOL,"GrowBufAppendDword",__FILE__,__LINE__)\
RealGrowBufAppendDword(buf,d)\
CLRTRACKCOMMENT
BOOL
RealGrowBufAppendStringA (
PGROWBUFFER GrowBuf,
PCSTR String
);
#define GrowBufAppendStringA(buf,str) SETTRACKCOMMENT(BOOL,"GrowBufAppendStringA",__FILE__,__LINE__)\
RealGrowBufAppendStringA(buf,str)\
CLRTRACKCOMMENT
BOOL
RealGrowBufAppendStringW (
PGROWBUFFER GrowBuf,
PCWSTR String
);
#define GrowBufAppendStringW(buf,str) SETTRACKCOMMENT(BOOL,"GrowBufAppendStringW",__FILE__,__LINE__)\
RealGrowBufAppendStringW(buf,str)\
CLRTRACKCOMMENT
BOOL
RealGrowBufAppendStringABA (
PGROWBUFFER GrowBuf,
PCSTR Start,
PCSTR EndPlusOne
);
#define GrowBufAppendStringABA(buf,a,b) SETTRACKCOMMENT(BOOL,"GrowBufAppendStringABA",__FILE__,__LINE__)\
RealGrowBufAppendStringABA(buf,a,b)\
CLRTRACKCOMMENT
BOOL
RealGrowBufAppendStringABW (
PGROWBUFFER GrowBuf,
PCWSTR Start,
PCWSTR EndPlusOne
);
#define GrowBufAppendStringABW(buf,a,b) SETTRACKCOMMENT(BOOL,"GrowBufAppendStringABW",__FILE__,__LINE__)\
RealGrowBufAppendStringABW(buf,a,b)\
CLRTRACKCOMMENT
BOOL
RealGrowBufCopyStringA (
PGROWBUFFER GrowBuf,
PCSTR String
);
#define GrowBufCopyStringA(buf,str) SETTRACKCOMMENT(BOOL,"GrowBufCopyStringA",__FILE__,__LINE__)\
RealGrowBufCopyStringA(buf,str)\
CLRTRACKCOMMENT
BOOL
RealGrowBufCopyStringW (
PGROWBUFFER GrowBuf,
PCWSTR String
);
#define GrowBufCopyStringW(buf,str) SETTRACKCOMMENT(BOOL,"GrowBufCopyStringW",__FILE__,__LINE__)\
RealGrowBufCopyStringW(buf,str)\
CLRTRACKCOMMENT
#ifdef UNICODE
#define MultiSzAppend MultiSzAppendW
#define MultiSzAppendVal MultiSzAppendValW
#define MultiSzAppendString MultiSzAppendStringW
#define GrowBufAppendString GrowBufAppendStringW
#define GrowBufAppendStringAB GrowBufAppendStringABW
#define GrowBufCopyString GrowBufCopyStringW
#else
#define MultiSzAppend MultiSzAppendA
#define MultiSzAppendVal MultiSzAppendValA
#define MultiSzAppendString MultiSzAppendStringA
#define GrowBufAppendString GrowBufAppendStringA
#define GrowBufAppendStringAB GrowBufAppendStringABA
#define GrowBufCopyString GrowBufCopyStringA
#endif