#include <stdio.h>
#include <stdarg.h>
-#include <malloc.h>
+#include <stdlib.h>
#include <string.h>
#include "membuf.h"
// buflen is alway "+1" bigger then
// what is shown here, the +1 is for
// the NULL string terminator
-#define DEFAULT_BUFSIZE 100
+#define DEFAULT_BUFSIZE 100
size_t maxlen; // allocated size
size_t curlen; // where we are inserting at
char *_strtoklast;
#define space_avail(pBuf) (pBuf->maxlen - pBuf->curlen)
#define dataend(pBuf) (((char *)(pBuf->buf)) + pBuf->curlen)
-size_t
+size_t
membuf_len(struct membuf *pBuf)
{
return pBuf->curlen;
const char *
membuf_strtok(struct membuf *pBuf, const char *sep, void **pLast)
{
- if (pBuf){
+ if (pBuf) {
pBuf->_strtoklast = NULL;
*pLast = pBuf;
- return strtok_r(((char *)(pBuf->buf)), sep, &(pBuf->_strtoklast));
+ // this should be "strtok_r()" but windows lacks */
+ return strtok(((char *)(pBuf->buf)), sep);
} else {
// recover our pBuf
pBuf = *((struct membuf **)(pLast));
- return strtok_r(NULL, sep, &(pBuf->_strtoklast));
+ // this should be "strtok_r()" but windows lacks */
+ return strtok( NULL, sep);
}
}
-
+
struct membuf *
struct membuf *pBuf;
pBuf = calloc(1, sizeof(*pBuf));
- if (pBuf){
+ if (pBuf) {
// we *ALWAYS* allocate +1 for null terminator.
pBuf->buf = calloc(DEFAULT_BUFSIZE + 1, sizeof(char));
- if (pBuf->buf == NULL){
+ if (pBuf->buf == NULL) {
free(pBuf);
pBuf = NULL;
} else {
newsize = ((int)(pBuf->maxlen)) + n;
// do not go negative, or too small
- if (newsize < DEFAULT_BUFSIZE){
+ if (newsize < DEFAULT_BUFSIZE) {
newsize = DEFAULT_BUFSIZE;
}
// always alloc +1 for the null terminator
vp = realloc(pBuf->buf, newsize + 1);
- if (vp){
+ if (vp) {
pBuf->buf = vp;
pBuf->maxlen = newsize;
return pBuf;
void membuf_delete(struct membuf *pBuf)
{
- if (pBuf){
- if (pBuf->buf){
+ if (pBuf) {
+ if (pBuf->buf) {
// wack data so it cannot be reused
memset(pBuf->buf,0,pBuf->maxlen);
free(pBuf->buf);
// do work
r = vsnprintf(dataend(pBuf),
sa,
- fmt,
+ fmt,
ap);
- if ((r > 0) && (((size_t)(r)) < sa)){
+ if ((r > 0) && (((size_t)(r)) < sa)) {
// Success!
pBuf->curlen += ((size_t)(r));
// remember: We always alloc'ed +1
}
// failure
- if (r < 0){
+ if (r < 0) {
// Option(A) format error
// Option(B) glibc2.0 bug
// assume (B).
}
// don't do this again
- if (grew){
+ if (grew) {
r = -1;
break;
}
grew = 1;
pBuf = membuf_grow(pBuf, r);
- if (pBuf == NULL){
+ if (pBuf == NULL) {
// grow failed
r = -1;
break;
sa = space_avail(pBuf);
// will it fit?
- if (sa < len){
+ if (sa < len) {
// if not, how much do we need?
r = ((int)(sa - len));
// do the grow.
pBuf = membuf_grow(pBuf, r);
// failed?
- if (pBuf == NULL){
+ if (pBuf == NULL) {
return pBuf;
}
}