stk_blob.c
来自「国外网站上的一些精典的C程序」· C语言 代码 · 共 79 行
C
79 行
/* ======================================================================= STK_BLOB.c Stack of Blobs. Binary Large OBjects. A.Reitsma, Delft, The Netherlands. v0.10 94-07-03 Public Domain. Stack for variable sized items. Implemented by making a stack of 'Blob Descriptors' and duplicating the item in malloc'ed memory. Localizing the stack number storage required interface functions to the stack module. The Pop function has two 'modes': one just returns the size of the blob; the other actually pops the blob. WARNING: This version is not really tested!----------------------------------------------------------------------- */#include <string.h>#include "stk_defs.h"#include "stack.h"#include "stk_blob.h"#define ERR_MEMORY -1#define NO_PROBLEMS 0#define Error(x) (x)struct BlobDesc{ void * data; int size;};int StackBlobCreate( void ){ return StackCreate( sizeof( struct BlobDesc ));}int PushBlob( int Stack, void * BlobSource, unsigned int BlobSize ){ struct BlobDesc Blob; Blob.size = BlobSize; /* get storage space for the blob */ Blob.data = MALLOC( BlobSize, char ); if( NULL == Blob.data ) { return ERR_MEMORY ; } memcpy( Blob.data, BlobSource, BlobSize ); /* duplicate the blob */ if( ERR_MEMORY == Push( Stack, & Blob )) /* push descriptor */ { FREE( Blob.data ); /* no need to cause memory leaks ... */ return ERR_MEMORY ; } return NO_PROBLEMS ;}unsigned int PopBlob( int Stack, void * BlobDestination ){ struct BlobDesc Blob ; Pop( Stack, & Blob ); if( NULL == BlobDestination ) StackUnpop( Stack ); else { memcpy( BlobDestination, Blob.data, Blob.size ); FREE( Blob.data ); } return Blob.size ;}/* ==== STK_BLOB.c end ================================================ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?