00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "system.h"
00027 #include "memchunk.h"
00028 #include "debug.h"
00029
00030
00031 memchunk* memchunkAlloc(int size)
00032 {
00033 memchunk* tmp = (memchunk*) calloc(1, sizeof(*tmp));
00034
00035 if (tmp)
00036 {
00037 tmp->size = size;
00038
00039 tmp->data = (byte*) malloc(size);
00040
00041
00042 if (tmp->data == (byte*) 0)
00043 {
00044 free(tmp);
00045 tmp = 0;
00046 }
00047 }
00048
00049 return tmp;
00050 }
00051
00052
00053 void memchunkFree(memchunk* m)
00054 {
00055 if (m)
00056 {
00057 if (m->data)
00058 {
00059 free(m->data);
00060
00061 m->size = 0;
00062 m->data = (byte*) 0;
00063 }
00064 free(m);
00065 }
00066 }
00067
00068 memchunk* memchunkResize(memchunk* m, int size)
00069 {
00070
00071 if (m)
00072 {
00073 if (m->data)
00074 m->data = (byte*) realloc(m->data, size);
00075 else
00076 m->data = (byte*) malloc(size);
00077
00078 if (m->data == (byte*) 0)
00079 {
00080 free(m);
00081 m = (memchunk*) 0;
00082 }
00083 else
00084
00085 m->size = size;
00086
00087 }
00088
00089
00090
00091 return m;
00092
00093 }
00094
00095
00096 memchunk* memchunkClone(const memchunk* m)
00097 {
00098 if (m)
00099 {
00100 memchunk* tmp = memchunkAlloc(m->size);
00101
00102 if (tmp)
00103 memcpy(tmp->data, m->data, m->size);
00104
00105 return tmp;
00106 }
00107
00108 return (memchunk*) 0;
00109 }
00110