#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 str·appendlen(string *s, vlong n, const byte* b) { /* bl = strlen(b); if (n > bl) panicf("attempted to make a substring longer than string"); */ str·grow(s, n); if(*s == nil) return 0; Hdr* h = (Hdr*)(*s - sizeof(Hdr)); memcpy(*s + str·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 str·append(string *s, const byte* b) { return str·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 str·appendbyte(string *s, const byte b) { str·grow(s, 1); if(*s == nil) return 0; Hdr* h = (Hdr*)(*s - sizeof(Hdr)); *(*s + str·len(*s)) = b; h->len++; (*s)[h->len] = '\0'; // NOTE: I don't think an explicit zero is required..? return 1; }