SLVAL sl_make_string_no_copy(sl_vm_t* vm, uint8_t* buff, size_t buff_len) { ensure_utf8(vm, buff, buff_len); SLVAL vstr = sl_allocate(vm, vm->lib.String); sl_string_t* str = (sl_string_t*)sl_get_ptr(vstr); str->char_len = sl_utf8_strlen(vm, buff, buff_len); str->buff = buff; str->buff_len = buff_len; str->hash_set = 0; return vstr; }
SLVAL sl_make_string(sl_vm_t* vm, uint8_t* buff, size_t buff_len) { SLVAL vstr = sl_allocate(vm, vm->lib.String); sl_string_t* str = (sl_string_t*)sl_get_ptr(vstr); if(sl_is_valid_utf8(buff, buff_len)) { str->encoding = "UTF-8"; str->char_len = sl_utf8_strlen(vm, buff, buff_len); } else { str->encoding = "CP1252"; str->char_len = buff_len; } str->buff = sl_alloc_buffer(vm->arena, buff_len + 1); memcpy(str->buff, buff, buff_len); str->buff[buff_len] = 0; str->buff_len = buff_len; str->hash_set = 0; return vstr; }