rendered paste body#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#define mstring(x) (x)->string
#define minit(x) { (x)->string = NULL; (x)->string_len=0; }
#define mfree(x) { if((x)->string) { free((x)->string); (x)->string=NULL; } (x)->string_len=0; }
typedef struct
{
char *string;
int string_len;
} mpointer;
int mprintf (mpointer * p, const char *format, ...)
{
va_list arg;
char *tmp;
int done;
p->string_len += strlen(format);
/*printf("Changing size to %i\n", p->string_len);*/
p->string=realloc(p->string, (p->string_len * sizeof(char)));
tmp=p->string;
while(tmp[0])
tmp++;
va_start (arg, format);
done = vsprintf (tmp, format, arg);
va_end (arg);
return done;
}
int main(int argc, char **argv)
{
mpointer test;
minit(&test);
mprintf(&test, "Hello world\n");
mprintf(&test, "This is a funny test\n");
mprintf(&test, "Of an self reallocating function\n");
/*mprintf(&test, "that shud work with %s\n", "variables");*/
printf("This is test (%i): \n\"%s\"\n", strlen(test.string), test.string);
mfree(&test);
exit(0);
}