⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memstream.c

📁 windows mobile上面实现的http协议
💻 C
字号:
#include "stream.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ALLOC_PIECE 1024
struct CMemStream //:pulbic IMemStream
{
	struct IMemStream vt;
	int pos;
	int alloc;
};

static int CMemStream_Write(struct IMemStream *p, void * data, int cbData)
{
	int n;
	struct CMemStream * self = (struct CMemStream*) p;
	if (self->alloc - self->vt.length < cbData)
	{
		n = (cbData/ALLOC_PIECE + 1)*ALLOC_PIECE;
		self->alloc += n;
		p->data = (char*) realloc(p->data , self->alloc);
	}

	memcpy(p->data + p->length, data, cbData);

	p->length += cbData;
	return cbData;
}

int CMemStream_Read(struct IMemStream *p, void * data, int cbData)
{
	struct CMemStream * self = (struct CMemStream*) p;
	int nRet = p->length - self->pos;

	if (nRet > cbData)
		nRet = cbData;

	if (nRet)
	{
		memcpy(data, p->data + self->pos, nRet);
		self->pos += nRet;
	}

	return nRet;
}

void CMemStream_Release(struct IMemStream* self)
{
	free(self->data);
	free(self);
}

struct IMemStream * CreateMemStream()
{
	struct CMemStream * mem = (struct CMemStream*) malloc (sizeof(struct CMemStream));
	mem->alloc = mem->vt.length = mem->pos = 0;
	mem->vt.data = NULL;
	mem->vt.Write = CMemStream_Write;
	mem->vt.Read = CMemStream_Read;
	mem->vt.Release = CMemStream_Release;
	return (struct IMemStream *)mem;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -