9 static void mem_extend(struct mem
*mem
)
12 mem
->sz
= mem
->sz
? mem
->sz
+ mem
->sz
: MEMSZ
;
13 mem
->s
= malloc(mem
->sz
);
15 memcpy(mem
->s
, s
, mem
->n
);
19 void mem_init(struct mem
*mem
)
21 memset(mem
, 0, sizeof(*mem
));
24 void mem_done(struct mem
*mem
)
27 memset(mem
, 0, sizeof(*mem
));
30 void mem_cut(struct mem
*mem
, int pos
)
32 mem
->n
= pos
< mem
->n
? pos
: mem
->n
;
35 void mem_cpy(struct mem
*mem
, int off
, void *buf
, int len
)
37 memcpy(mem
->s
+ off
, buf
, len
);
40 void mem_put(struct mem
*mem
, void *buf
, int len
)
42 while (mem
->n
+ len
+ 1 >= mem
->sz
)
44 mem_cpy(mem
, mem
->n
, buf
, len
);
48 void mem_putc(struct mem
*mem
, int c
)
50 if (mem
->n
+ 2 >= mem
->sz
)
55 void mem_putz(struct mem
*mem
, int sz
)
57 while (mem
->n
+ sz
+ 1 >= mem
->sz
)
59 memset(mem
->s
+ mem
->n
, 0, sz
);
63 /* return a pointer to mem's buffer; valid as long as mem is not modified */
64 void *mem_buf(struct mem
*mem
)
68 mem
->s
[mem
->n
] = '\0';
72 int mem_len(struct mem
*mem
)