mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.7 KiB
91 lines
2.7 KiB
// msf.h: see "The Multistream File API" for more information
|
|
|
|
#ifndef __MSF_INCLUDED__
|
|
#define __MSF_INCLUDED__
|
|
|
|
#ifndef TRUE
|
|
|
|
#define TRUE 1
|
|
#define FALSE 0
|
|
typedef int BOOL;
|
|
|
|
#ifdef _DEBUG
|
|
#define verify(x) assert(x)
|
|
#else
|
|
#define verify(x) (x)
|
|
#endif
|
|
|
|
#endif
|
|
|
|
typedef unsigned short SN; // stream number
|
|
typedef long CB; // size (count of bytes)
|
|
typedef long OFF; // offset
|
|
|
|
#define cbNil ((long)-1)
|
|
#define snNil ((SN)-1)
|
|
|
|
typedef long MSF_EC;
|
|
enum MSFErrorCodes {
|
|
MSF_EC_OK,
|
|
MSF_EC_OUT_OF_MEMORY,
|
|
MSF_EC_NOT_FOUND,
|
|
MSF_EC_FILE_SYSTEM,
|
|
MSF_EC_FORMAT,
|
|
MSF_EC_MAX
|
|
};
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
// MSFOpen -- open MSF; return MSF* or NULL if error.
|
|
// MSFOpenEx -- open MSF with specific page size; return MSF* or NULL if error.
|
|
// MSFGetCbPage -- return page size
|
|
// MSFGetCbStream -- return size of stream or -1 if stream does not exist
|
|
// MSFReadStream -- read stream into pvBuf; return TRUE if successful
|
|
// MSFWriteStream -- overwrite part of stream with pvBuf; return TRUE if successful
|
|
// MSFReplaceStream -- completely replace entire stream with pvBuf; return TRUE if successful
|
|
// MSFAppendStream -- append pvBuf to end of stream; return TRUE if successful
|
|
// MSFCommit -- commit all pending changes; return TRUE if successful
|
|
// MSFClose -- close MSF; return TRUE if successful
|
|
// MSFGetRawBytes -- pump raw data stream into a callback
|
|
|
|
#ifdef MSF_IMP
|
|
#ifdef PDB_LIBRARY
|
|
#define MSF_EXPORT2
|
|
#else
|
|
#define MSF_EXPORT2 __declspec(dllexport)
|
|
#endif
|
|
#else
|
|
#define MSF_EXPORT2 __declspec(dllimport)
|
|
#endif
|
|
|
|
#define MSF_EXPORT
|
|
|
|
// type of callback arg to MSFGetRawBytes
|
|
typedef BOOL (__cdecl *PFNfReadMSFRawBytes)(const void *, long);
|
|
|
|
class MSF;
|
|
MSF_EXPORT2 MSF* MSFOpen(const char *name, BOOL fWrite, MSF_EC* pec);
|
|
MSF_EXPORT2 MSF* MSFOpenEx(const char *name, BOOL fWrite, MSF_EC* pec, CB cbPage);
|
|
MSF_EXPORT2 CB MSFGetCbPage(MSF* pmsf);
|
|
MSF_EXPORT2 CB MSFGetCbStream(MSF* pmsf, SN sn);
|
|
MSF_EXPORT SN MSFGetFreeSn(MSF* pmsf);
|
|
MSF_EXPORT2 BOOL MSFReadStream(MSF* pmsf, SN sn, void* pvBuf, CB cbBuf);
|
|
MSF_EXPORT BOOL MSFReadStream2(MSF* pmsf, SN sn, OFF off, void* pvBuf, CB* pcbBuf);
|
|
MSF_EXPORT BOOL MSFWriteStream(MSF* pmsf, SN sn, OFF off, void* pvBuf, CB cbBuf);
|
|
MSF_EXPORT BOOL MSFReplaceStream(MSF* pmsf, SN sn, void* pvBuf, CB cbBuf);
|
|
MSF_EXPORT BOOL MSFAppendStream(MSF* pmsf, SN sn, void* pvBuf, CB cbBuf);
|
|
MSF_EXPORT BOOL MSFTruncateStream(MSF* pmsf, SN sn, CB cb);
|
|
MSF_EXPORT BOOL MSFDeleteStream(MSF* pmsf, SN sn);
|
|
MSF_EXPORT BOOL MSFCommit(MSF* pmsf);
|
|
MSF_EXPORT BOOL MSFPack(MSF* pmsf);
|
|
MSF_EXPORT2 BOOL MSFClose(MSF* pmsf);
|
|
MSF_EXPORT BOOL MSFGetRawBytes(MSF* pmsf, PFNfReadMSFRawBytes fSnarfRawBytes);
|
|
MSF_EXPORT MSF* MSFCreateCopy (MSF* pmsf, const char *pCopyName);
|
|
|
|
#if defined(__cplusplus)
|
|
};
|
|
#endif
|
|
|
|
#endif // __MSF_INCLUDED__
|