B3dChar* b3d_read_string(B3d *context) { int currentSize = 100; B3dChar *result = (B3dChar*)b3d_malloc(context, currentSize); int pos = -1; do { ++pos; if(pos == currentSize) { int newSize = currentSize * 2; B3dChar *newBuff = (B3dChar*)b3d_malloc(context, newSize); memcpy(newBuff, result, currentSize); b3d_free(context, result); result = newBuff; currentSize = newSize; } context->read(context, result + pos, 1); }while(result[pos] != '\0'); return result; }