Пример #1
0
static
sb_string_t __sb_string_replace__(sb_string_t str,
    const sb_char_t *pattern, sb_size_t pattern_len,
    const sb_char_t *to, sb_size_t to_len, sb_int_t max)
{
    sb_string_t str_end = str + sb_string_length(str);
    sb_string_t dst = sb_string_create("");
    sb_char_t *find = str;
    sb_char_t *last = str;
    sb_bool_t repeat = max < 0 ? true : false;

    dst = sb_string_reserve(dst, sb_string_length(str));

    for (; repeat ? repeat : max--;) {
        find = sb_strstr(find, pattern);
        if (find == nullptr) {
            goto done;
        }

        dst = sb_string_cat_n(dst, last, find - last);
        dst = sb_string_cat_n(dst, to, to_len);

        find += pattern_len;
        last = find;
    }

done:
    dst = sb_string_cat_n(dst, last, str_end - last);
    return dst;
}
Пример #2
0
hscriptlet *scriptlet_prepare(scriptlet *s)
{
	scriptlet_share(s);
	hscriptlet *r = (hscriptlet*)calloc(1, sizeof(struct hscriptlet_));
	r->s = s;
	r->symtab = sb_string_create();
	scriptlet_set_int(r, "$FIRST", 1);
	r->it_syms_save = r->it_syms;
	return r;
}