Stradds.c (547B)
1 #include "std.h" 2 3 void 4 Straddc(String *p, int c) 5 { 6 Strinsure(p, p->n + 1); 7 p->s[p->n++] = c; 8 p->s[p->n] = '\0'; 9 } 10 11 void 12 Stradds(String *p, String s) 13 { 14 Strinsure(p, p->n + s.n); 15 memmove(p->s + p->n, s.s, s.n); 16 p->n += s.n; 17 p->s[p->n] = '\0'; 18 } 19 20 void 21 Strinsure(String *p, ulong n) 22 { 23 ulong size; 24 25 if (!p->size) 26 sysfatal("Strinsure: read-only"); 27 assert(p->s && p->size); 28 for (size = p->size; n >= size; size *= 2); 29 if (size != p->size) { 30 p->size = size; 31 p->s = realloc(p->s, p->size); 32 if (!p->s) 33 sysfatal("realloc(): %r"); 34 } 35 }