- if(s->data) naFree(s->data);
- s->len = sz;
- s->data = naAlloc(sz+1);
- s->data[sz] = 0; // nul terminate
+ if(s->emblen == -1 && DATA(s)) naFree(s->data.ref.ptr);
+ if(sz > MAX_STR_EMBLEN) {
+ s->emblen = -1;
+ s->data.ref.len = sz;
+ s->data.ref.ptr = naAlloc(sz+1);
+ } else {
+ s->emblen = sz;
+ }
+ DATA(s)[sz] = 0; // nul terminate
+}
+
+naRef naStr_buf(naRef dst, int len)
+{
+ setlen(PTR(dst).str, len);
+ naBZero(DATA(PTR(dst).str), len);
+ return dst;