示例#1
0
文件: string.c 项目: richo/slash
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;
}
示例#2
0
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;
}