tb_char_t const* tb_string_cstrncat(tb_string_ref_t string, tb_char_t const* s, tb_size_t n) { // check tb_assert_and_check_return_val(string && s && n, tb_null); // done tb_char_t* p = (tb_char_t*)tb_buffer_memncpyp(string, tb_string_size(string), (tb_byte_t const*)s, n + 1); if (p) p[tb_string_size(string)] = '\0'; return p; }
tb_byte_t* tb_buffer_memncpy(tb_buffer_t* buffer, tb_byte_t const* b, tb_size_t n) { return tb_buffer_memncpyp(buffer, 0, b, n); }
tb_byte_t* tb_buffer_memcpyp(tb_buffer_t* buffer, tb_size_t p, tb_buffer_t* b) { return tb_buffer_memncpyp(buffer, p, tb_buffer_data(b), tb_buffer_size(b)); }
tb_byte_t* tb_buffer_memcpy(tb_buffer_ref_t buffer, tb_buffer_ref_t b) { return tb_buffer_memncpyp(buffer, 0, tb_buffer_data(b), tb_buffer_size(b)); }