00001
00008 #include "dkcBuffer.h"
00009 #include "dkcStdio.h"
00010
00011
00013 DKC_BUFFER* WINAPI dkcAllocBuffer(const void *data,size_t size){
00014 DKC_BUFFER *p;
00015
00016 if(0==size) return NULL;
00017
00018 p = dkcAllocate(sizeof(DKC_BUFFER));
00019 if(NULL==p) return NULL;
00020
00021
00022 p->mBuff = dkcAllocate(size);
00023 if(NULL==p->mBuff) goto Error;
00024
00025 p->mSize = size;
00026
00027 if(data){
00028 if(DKUTIL_FAILED(dkcBufferSet(p,data,size))){
00029 goto Error;
00030 }
00031 }else{
00032
00033 }
00034 return p;
00035 Error:
00036 dkcFree(&p);
00037 return NULL;
00038 }
00039
00040 int WINAPI dkcFreeBuffer(DKC_BUFFER **ptr){
00041 if(NULL==ptr || NULL==*ptr) return edk_ArgumentException;
00042 dkcFree(&(*ptr)->mBuff);
00043 dkcFree(ptr);
00044 return edk_SUCCEEDED;
00045 }
00046
00047
00048
00049 int WINAPI dkcBufferSet(DKC_BUFFER *ptr,const void *data,size_t size)
00050 {
00051
00052
00053 return dkc_memcpy(ptr->mBuff,ptr->mSize,data,size);
00054 }
00058 int WINAPI dkcBufferGet(DKC_BUFFER *ptr,void *data,size_t size){
00059
00060 return dkc_memcpy(data,size,ptr->mBuff,ptr->mSize);
00061 }
00062
00063 int WINAPI dkcBufferResize(DKC_BUFFER *ptr,size_t size)
00064 {
00065 void *NewPtr;
00066 if(NULL==ptr || 0==size || NULL==ptr->mBuff) return edk_ArgumentException;
00067 if(DKUTIL_FAILED(dkcReallocate(&NewPtr,size,&ptr->mBuff))){
00068 return edk_FAILED;
00069 }
00070
00071 ptr->mBuff = NewPtr;
00072 ptr->mSize = size;
00073
00074 return edk_SUCCEEDED;
00075 }
00076
00077
00078
00079 DKC_BUFFER* WINAPI dkcAllocBufferCopy(const DKC_BUFFER *ptr){
00080 dkcmNOT_ASSERT(NULL==ptr || NULL==ptr->mBuff);
00081
00082 return dkcAllocBuffer(ptr->mBuff,ptr->mSize);
00083 }
00084
00085 size_t WINAPI dkcBufferSize(DKC_BUFFER *p){
00086 return p->mSize;
00087 }
00088 BYTE *WINAPI dkcBufferPointer(DKC_BUFFER *p){
00089 return p->mBuff;
00090 }