5 memfile_t *memfile_creat(const char *name, size_t init)
11 mf.base = (char *)malloc(init);
21 pmf = (memfile_t *)malloc(sizeof(memfile_t));
22 memcpy(pmf, &mf, sizeof(memfile_t));
24 pmf->name = strdup(name);
29 void memfile_destroy(memfile_t *mf)
44 void memfile_seek(memfile_t *mf, long seek)
49 long memfile_tell(memfile_t *mf)
54 size_t memfile_read(memfile_t *mf, void *buffer, size_t maxsize)
56 if (!maxsize || mf->offs >= mf->usedoffs)
61 if (mf->usedoffs - mf->offs < (long)maxsize)
63 maxsize = mf->usedoffs - mf->offs;
70 memcpy(buffer, mf->base + mf->offs, maxsize);
77 int memfile_write(memfile_t *mf, const void *buffer, size_t size)
79 if (mf->offs + size > mf->size)
81 size_t newsize = (mf->size + size) * 2;
84 char *oldbase = mf->base;
85 mf->base = (char *)malloc(newsize);
90 memcpy(mf->base, oldbase, mf->size);
92 mf->base = (char *)realloc(mf->base, newsize);
101 memcpy(mf->base + mf->offs, buffer, size);
104 if (mf->offs > mf->usedoffs)
106 mf->usedoffs = mf->offs;
112 void memfile_reset(memfile_t *mf)