dhilst

obstack looks cool

/*
* An obstack is a pool of memory
* containing a stack of objects
*/


#include <stdio.h>
#include <stdlib.h>
#include <obstack.h>


#define obstack_chunk_alloc xmalloc
#define obstack_chunk_free free
#define obstack_alloc_fail_handler (fprintf (stderr, "Memory exhausted\n"); exit (EXIT_FAILURE);)

static struct obstack string_obstack;


void *
xmalloc (size_t size)
{
register void *value = malloc (size);
if (value == 0)
return 0;

return value;
}


char *
copystring (struct obstack *obstack_ptr, char *string)
{
size_t len = strlen (string) + 1;
char *s = (char *) obstack_alloc (obstack_ptr, len);
memcpy (s, string, len);

return s;
}


int
main (void)
{
char *str;

obstack_init (&string_obstack);
str = copystring (&string_obstack, "Hello World");
printf ("%s\n", str);
obstack_free (&string_obstack, str);
return 0;
}