|
|
/* stream.c - OLE stream I/O routines.
* * Created by Microsoft Corporation. */
#include "packager.h"
static LPSTR *glplpstr; static STREAMOP gsop;
/* SetFile() - Set the file to be written.
*/ VOID SetFile( STREAMOP sop, INT fh, LPSTR *lplpstr ) { switch (gsop = sop) { case SOP_FILE: glpStream->fh = fh; break;
case SOP_MEMORY: gcbObject = 0L; glplpstr = lplpstr; break; } }
/* ReadStream() - Read bytes from memory, from a file, or just count them.
*/ DWORD ReadStream( LPAPPSTREAM lpStream, LPSTR lpstr, DWORD cb ) { switch (gsop) { case SOP_FILE: return _lread(lpStream->fh, lpstr, cb); break;
case SOP_MEMORY: gcbObject += cb;
if (glplpstr) MemRead(glplpstr, lpstr, cb);
break; }
return cb; }
/* PosStream() - Reset the position of the file pointer.
* * Note: This is never used; luckily, or it would mess up the count. */ DWORD PosStream( LPAPPSTREAM lpStream, LONG pos, INT iorigin) { return _llseek(lpStream->fh, pos, iorigin); }
/* WriteStream() - Write bytes to memory, to a file, or just count them.
*/ DWORD WriteStream( LPAPPSTREAM lpStream, LPSTR lpstr, DWORD cb ) { switch (gsop) { case SOP_FILE: return _lwrite(lpStream->fh, lpstr, cb);
case SOP_MEMORY: gcbObject += cb;
if (glplpstr) MemWrite(glplpstr, lpstr, cb);
break; }
return cb; }
/********************* Memory read/write functions ********************/ /* MemRead() - Read bytes from the memory (stream).
*/ DWORD MemRead( LPSTR *lplpStream, LPSTR lpItem, DWORD dwSize ) { DWORD cb; CHAR *hpDest = lpItem; CHAR *hpSrc = *lplpStream;
for (cb = dwSize; cb; cb--) *hpDest++ = *hpSrc++;
*lplpStream = hpSrc;
return dwSize; }
/* MemWrite() - Write bytes to the memory (stream).
*/ DWORD MemWrite( LPSTR *lplpStream, LPSTR lpItem, DWORD dwSize ) { DWORD cb; CHAR *hpDest = *lplpStream; CHAR *hpSrc = lpItem;
for (cb = dwSize; cb; cb--) *hpDest++ = *hpSrc++;
*lplpStream = hpDest;
return dwSize; }
|