static void test_resize(void) { struct sol_buffer buf = SOL_BUFFER_INIT_EMPTY; const int size = 1024; char *buf_data; int i; sol_buffer_resize(&buf, size); memset(buf.data, 22, size); sol_buffer_resize(&buf, size * 2); buf_data = buf.data; for (i = 0; i < size; i++) { ASSERT_INT_EQ(buf_data[i], 22); } sol_buffer_resize(&buf, size / 2); buf_data = buf.data; for (i = 0; i < size / 2; i++) { ASSERT_INT_EQ(buf_data[i], 22); } sol_buffer_fini(&buf); }
static void test_resize(void) { struct sol_buffer buf = SOL_BUFFER_EMPTY; const int size = 1024; int i; sol_buffer_resize(&buf, size); memset(buf.data, 22, size); sol_buffer_resize(&buf, size * 2); for (i = 0; i < size; i++) { ASSERT(buf.data[i] == 22); } sol_buffer_resize(&buf, size / 2); for (i = 0; i < size / 2; i++) { ASSERT(buf.data[i] == 22); } sol_buffer_fini(&buf); }
SOL_API int sol_buffer_ensure(struct sol_buffer *buf, size_t min_size) { int err; SOL_NULL_CHECK(buf, -EINVAL); if (min_size >= SIZE_MAX - nul_byte_size(buf)) return -EINVAL; if (buf->capacity >= min_size) return 0; err = sol_buffer_resize(buf, align_power2(min_size + nul_byte_size(buf))); if (err == -EPERM) return -ENOMEM; return err; }
static void test_memory_not_owned(void) { struct sol_buffer buf; struct sol_str_slice slice; char backend[10]; int err; sol_buffer_init_flags(&buf, backend, sizeof(backend), SOL_BUFFER_FLAGS_MEMORY_NOT_OWNED); err = sol_buffer_ensure(&buf, 0); ASSERT_INT_EQ(err, 0); /* ensure considers null-byte, so we use sizeof - 1 */ err = sol_buffer_ensure(&buf, sizeof(backend) - 1); ASSERT_INT_EQ(err, 0); err = sol_buffer_ensure(&buf, sizeof(backend) * 2); ASSERT_INT_EQ(err, -ENOMEM); err = sol_buffer_resize(&buf, 0); ASSERT_INT_EQ(err, -EPERM); slice = sol_str_slice_from_str("test"); err = sol_buffer_append_slice(&buf, slice); ASSERT_INT_EQ(err, 0); ASSERT_STR_EQ(buf.data, "test"); slice = sol_str_slice_from_str("other"); err = sol_buffer_append_slice(&buf, slice); ASSERT_INT_EQ(err, 0); ASSERT_STR_EQ(buf.data, "testother"); slice = sol_str_slice_from_str("OVERFLOW"); err = sol_buffer_append_slice(&buf, slice); ASSERT_INT_EQ(err, -ENOMEM); sol_buffer_fini(&buf); }