diff --git a/libfatstr/Makefile b/libfatstr/Makefile new file mode 100644 index 0000000..222a846 --- /dev/null +++ b/libfatstr/Makefile @@ -0,0 +1,2 @@ +libfatstr.o: libfatstr.c libfatstr.h + $(CC) -g -o libfatstr.o libfatstr.c diff --git a/libfatstr/libfatstr.c b/libfatstr/libfatstr.c new file mode 100644 index 0000000..3279e5e --- /dev/null +++ b/libfatstr/libfatstr.c @@ -0,0 +1,52 @@ +#include /* free(3), malloc(3), realloc(3) */ +#include /* strncpy(3) */ +#include "fatstr.h" + +/* quick and dirty ASCII edition */ + +/* Size by which to grow memory allocations. */ +#define GROW_INTERVAL 100 + +struct FatStr * +FatStr_initialize(struct FatStr *p){ + + if((p->v = malloc((sizeof *(p->v)) * GROW_INTERVAL)) == NULL) + return NULL; /* who knows */ + p->a = GROW_INTERVAL; + p->s = 0; + return p; +} + +struct FatStr * +FatStr_append(struct FatStr *p, FatStr_scalar_t c){ + FatStr_vector_t t; + + if(p->s + 1 > p->a){ + if((t = realloc(p->v, (sizeof *(p->v)) * (p->a + GROW_INTERVAL))) + == NULL) + return NULL; + p->a += GROW_INTERVAL; + } + (p->v)[(p->s)++] = c; +} + +/* retval will need to be freed */ +char * +FatStr_convert(struct FatStr *p){ + char *r; + + if((r = malloc(p->s * (sizeof *(p->v)))) == NULL) /* might be buggy */ + return NULL; + strncpy(r, p->v, p->s); + return r; +} + +struct FatStr * +FatStr_destruct(struct FatStr *p){ + free(p->v); + return NULL; +} + +struct FatStr * +FatStr_trimfront(){ +} diff --git a/libfatstr/libfatstr.h b/libfatstr/libfatstr.h new file mode 100644 index 0000000..bd78287 --- /dev/null +++ b/libfatstr/libfatstr.h @@ -0,0 +1,15 @@ +typedef FatStr_size_t size_t; +typedef FatStr_scalar_t int; +typedef FatStr_vector_t FatStr_scalar_t *; + +struct FatStr{ + FatStr_size_t a; /* allocation */ + FatStr_size_t s; /* actual size */ + FatStr_vector_t v; /* vector */ +}; + +struct FatStr *FatStr_append(struct FatStr *p, FatStr_scalar_t c); +FatStr_vector_t FatStr_convert(struct FatStr *p); +struct FatStr *FatStr_destruct(struct FatStr *p); +struct FatStr *FatStr_initialize(struct FatStr *p); +struct FatStr *FatStr_trimfront(