whelk/string.c
author J. Ali Harlow <ali@juiblex.co.uk>
Fri May 20 11:20:39 2016 +0100 (2016-05-20)
changeset 19 a659f35ffb54
permissions -rw-r--r--
Added tag 0.3.3 for changeset 30dd8888a271
     1 #include <stdlib.h>
     2 #include "_whelk.h"
     3 
     4 char *whelk_string_prealloc(struct whelk_string *string,size_t len)
     5 {
     6     char *new;
     7     if (string->alloc<string->len+len)
     8     {
     9 	new=realloc(string->buffer,string->len+len);
    10 	if (!new)
    11 	    return NULL;
    12 	string->buffer=new;
    13 	string->alloc=string->len+len;
    14     }
    15     return string->buffer+string->len;
    16 }
    17 
    18 void whelk_string_seek(struct whelk_string *string,ssize_t offset)
    19 {
    20     if (offset>=0 || string->len>=(size_t)-offset)
    21 	string->len+=offset;
    22     else
    23 	string->len=0;
    24 }
    25 
    26 char *whelk_string_finalize(struct whelk_string *string)
    27 {
    28     whelk_string_prealloc(string,1);
    29     string->buffer[string->len]='\0';
    30     return string->buffer;
    31 }
    32 
    33 void whelk_string_free(struct whelk_string *string)
    34 {
    35     free(string->buffer);
    36     memset(string,0,sizeof(*string));
    37 }