tb_char_t const* tb_string_strip(tb_string_ref_t string, tb_size_t n) { // check tb_assert_and_check_return_val(string, tb_null); // out? tb_check_return_val(n < tb_string_size(string), tb_string_cstr(string)); // strip tb_char_t* p = (tb_char_t*)tb_buffer_resize(string, n + 1); if (p) p[n] = '\0'; // ok? return p; }
tb_byte_t* tb_buffer_memncpyp(tb_buffer_t* buffer, tb_size_t p, tb_byte_t const* b, tb_size_t n) { // check tb_assert_and_check_return_val(buffer && b, tb_null); // check tb_check_return_val(n, tb_buffer_data(buffer)); // resize tb_byte_t* d = tb_buffer_resize(buffer, p + n); tb_assert_and_check_return_val(d, tb_null); // copy it tb_memcpy(d + p, b, n); // ok return d; }
tb_byte_t* tb_buffer_memnsetp(tb_buffer_t* buffer, tb_size_t p, tb_byte_t b, tb_size_t n) { // check tb_assert_and_check_return_val(buffer, tb_null); // check tb_check_return_val(n, tb_buffer_data(buffer)); // resize tb_byte_t* d = tb_buffer_resize(buffer, p + n); tb_assert_and_check_return_val(d, tb_null); // memset tb_memset(d + p, b, n); // ok? return d; }
tb_byte_t* tb_buffer_memncat(tb_buffer_t* buffer, tb_byte_t const* b, tb_size_t n) { // check tb_assert_and_check_return_val(buffer && b, tb_null); // check tb_check_return_val(n, tb_buffer_data(buffer)); // is null? tb_size_t p = tb_buffer_size(buffer); if (!p) return tb_buffer_memncpy(buffer, b, n); // resize tb_byte_t* d = tb_buffer_resize(buffer, p + n); tb_assert_and_check_return_val(d, tb_null); // memcat tb_memcpy(d + p, b, n); // ok? return d; }
tb_byte_t* tb_buffer_memnmovp(tb_buffer_t* buffer, tb_size_t p, tb_size_t b, tb_size_t n) { // check tb_assert_and_check_return_val(buffer && (b + n) <= tb_buffer_size(buffer), tb_null); // clear? if (b == tb_buffer_size(buffer)) { tb_buffer_clear(buffer); return tb_buffer_data(buffer); } // check tb_check_return_val(p != b && n, tb_buffer_data(buffer)); // resize tb_byte_t* d = tb_buffer_resize(buffer, p + n); tb_assert_and_check_return_val(d, tb_null); // memmov tb_memmov(d + p, d + b, n); return d; }