jschar * StringBuffer::extractWellSized() { size_t capacity = cb.capacity(); size_t length = cb.length(); jschar *buf = cb.extractRawBuffer(); if (!buf) return NULL; /* For medium/big buffers, avoid wasting more than 1/4 of the memory. */ JS_ASSERT(capacity >= length); if (length > CharBuffer::sMaxInlineStorage && capacity - length > length / 4) { size_t bytes = sizeof(jschar) * (length + 1); JSContext *cx = context(); jschar *tmp = (jschar *)cx->realloc_(buf, bytes); if (!tmp) { js_free(buf); return NULL; } buf = tmp; } return buf; }