Here's some simple buffer code, kind of like some of Erwin's stuff and the dynamic buffer patch on George's site. This is vastly simplified but it works quite well. --cut here-- struct buffer { char *p; char *curloc; int size; /* size of the buffer */ int len; /* length of the string, len <= size */ }; typedef struct buffer Buffer; void bprintf(struct buffer *b, const char *fmt, ...) { char tempbuf[3 * MAX_STRING_LENGTH + 1]; va_list args; va_start(args, fmt); vsnprintf(tempbuf, 3 * MAX_STRING_LENGTH, fmt, args); va_end(args); buf_strcat(b, tempbuf); } struct buffer * new_buffer(int i) { struct buffer *b; b = mud_malloc(sizeof(*b)); b->size = i + 5; b->curloc = b->p = mud_malloc(b->size); b->len = 0; return b; } void free_buffer(struct buffer *b) { mud_free(b->p); mud_free(b); } void buf_strcpy(struct buffer *b, const char *s) { mud_free(b->p); b->size = mud_strlen(s) + 4; b->len = mud_strlen(s); b->p = mud_malloc(b->size); mud_strcpy(b->p, s); b->curloc = b->p + b->len; buf_strcat(b, s); } void buf_strcat(struct buffer *b, const char *s) { int len; len = mud_strlen(s); if (len + b->len >= b->size) { int offset; offset = b->curloc - b->p; b->size = len + 2 * b->size + 2; b->p = mud_realloc(b->p, b->size); b->curloc = b->p + offset; } b->len += len; mud_strcpy(b->curloc, s); b->curloc += len; } --cut here-- -- James Turner turnerjh@pattern.net UIN: 1102038 http://www.vuse.vanderbilt.edu/~turnerjh/ +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST