#include "internal.h" // append will append the given null terminated c string to the string data // structure. this variant can append a substring of length len of the given // string to our buffer. the result is reallocated if not enough room is present // in the buffer. int string·appendlen(string *s, vlong n, byte* b) { /* bl = strlen(b); if (n > bl) panicf("attempted to make a substring longer than string"); */ string·grow(s, n); if(*s == nil) return 0; Hdr* h = (Hdr*)(*s - sizeof(Hdr)); memcpy(*s + string·len(*s), b, n); h->len += n; (*s)[h->len] = '\0'; return n; } // append will append the given null terminated c string to the string data // structure. this variant will append the entire string. int string·append(string *s, byte* b) { return string·appendlen(s, strlen(b), b); } // appendbyte will append the given byte to our string. // NOTE: as the byte is on the stack, it is not null-terminated. // can not pass to the above functions. int string·appendbyte(string *s, byte b) { string·grow(s, 1); if(*s == nil) return 0; Hdr* h = (Hdr*)(*s - sizeof(Hdr)); *(*s + string·len(*s)) = b; h->len++; (*s)[h->len] = '\0'; // NOTE: I don't think an explicit zero is required..? return 1; }