All pastes #46410 Raw Edit

Miscellany

public text v1 · immutable
#46410 ·published 2006-03-21 00:39 UTC
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);
}