plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

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 }