enum CommandResult rc = MUTT_CMD_ERROR;
struct Buffer *token = mutt_buffer_pool_get();
- struct Buffer *expn = mutt_buffer_from(line);
- expn->dptr = expn->data;
+ struct Buffer expn = { 0 };
+ mutt_buffer_addstr(&expn, line);
+ expn.dptr = expn.data;
mutt_buffer_reset(err);
- SKIPWS(expn->dptr);
- while (*expn->dptr != '\0')
+ SKIPWS(expn.dptr);
+ while (*expn.dptr != '\0')
{
- mutt_extract_token(token, expn, MUTT_TOKEN_NO_FLAGS);
+ mutt_extract_token(token, &expn, MUTT_TOKEN_NO_FLAGS);
for (size_t i = 0; ICommandList[i].name; i++)
{
if (mutt_str_strcmp(token->data, ICommandList[i].name) != 0)
continue;
- rc = ICommandList[i].func(token, expn, ICommandList[i].data, err);
+ rc = ICommandList[i].func(token, &expn, ICommandList[i].data, err);
if (rc != 0)
goto finish;
finish:
mutt_buffer_pool_release(&token);
- mutt_buffer_free(&expn);
+ mutt_buffer_dealloc(&expn);
return rc;
}
{
bool cont = false; /* Set if we want to continue instead of break */
- struct Buffer *folderbuf = mutt_buffer_alloc(mutt_buffer_pool_get(), PATH_MAX);
+ struct Buffer *folderbuf = mutt_buffer_pool_get();
+ mutt_buffer_alloc(folderbuf, PATH_MAX);
struct Mailbox *m = NULL;
char *cp = NULL;
#ifdef USE_NNTP
int i;
enum CommandResult rc = MUTT_CMD_SUCCESS;
- struct Buffer *expn = mutt_buffer_from(line);
- expn->dptr = expn->data;
+ struct Buffer expn = { 0 };
+ mutt_buffer_addstr(&expn, line);
+ expn.dptr = expn.data;
*err->data = 0;
- SKIPWS(expn->dptr);
- while (*expn->dptr != '\0')
+ SKIPWS(expn.dptr);
+ while (*expn.dptr != '\0')
{
- if (*expn->dptr == '#')
+ if (*expn.dptr == '#')
break; /* rest of line is a comment */
- if (*expn->dptr == ';')
+ if (*expn.dptr == ';')
{
- expn->dptr++;
+ expn.dptr++;
continue;
}
- mutt_extract_token(token, expn, MUTT_TOKEN_NO_FLAGS);
+ mutt_extract_token(token, &expn, MUTT_TOKEN_NO_FLAGS);
for (i = 0; Commands[i].name; i++)
{
if (mutt_str_strcmp(token->data, Commands[i].name) == 0)
{
- rc = Commands[i].func(token, expn, Commands[i].data, err);
+ rc = Commands[i].func(token, &expn, Commands[i].data, err);
if (rc != MUTT_CMD_SUCCESS)
{ /* -1 Error, +1 Finish */
goto finish; /* Propagate return code */
}
}
finish:
- mutt_buffer_free(&expn);
+ mutt_buffer_dealloc(&expn);
return rc;
}
buf->dptr = buf->data;
}
-/**
- * mutt_buffer_from - Create Buffer from an existing string
- * @param seed String to put in the Buffer
- * @retval ptr New Buffer
- * @retval NULL Error
- *
- * @note The write pointer is positioned at the end of the string
- */
-struct Buffer *mutt_buffer_from(const char *seed)
-{
- if (!seed)
- return NULL;
-
- struct Buffer *b = mutt_buffer_new();
- b->data = mutt_str_strdup(seed);
- b->dsize = mutt_str_strlen(seed);
- b->dptr = b->data + b->dsize;
- return b;
-}
-
/**
* mutt_buffer_addstr_n - Add a string to a Buffer, expanding it if necessary
* @param buf Buffer to add to
* mutt_buffer_alloc - Make sure a buffer can store at least new_size bytes
* @param buf Buffer to change
* @param new_size New size
- * @retval buf The buf argument, useful in
- * struct Buffer *buf = mutt_buffer_alloc(mutt_buffer_new(), 1024);
*/
-struct Buffer *mutt_buffer_alloc(struct Buffer *buf, size_t new_size)
+void mutt_buffer_alloc(struct Buffer *buf, size_t new_size)
{
- if (buf)
+ if (!buf)
{
- if (!buf->dptr)
- buf->dptr = buf->data;
-
- if (new_size > buf->dsize)
- {
- size_t offset = (buf->dptr && buf->data) ? buf->dptr - buf->data : 0;
-
- buf->dsize = new_size;
- mutt_mem_realloc(&buf->data, buf->dsize);
- buf->dptr = buf->data + offset;
- /* This ensures an initially NULL buf->data is now properly terminated. */
- *buf->dptr = '\0';
- }
+ return;
}
- return buf;
+ if (!buf->dptr)
+ {
+ buf->dptr = buf->data;
+ }
+
+ if (new_size > buf->dsize)
+ {
+ size_t offset = (buf->dptr && buf->data) ? buf->dptr - buf->data : 0;
+
+ buf->dsize = new_size;
+ mutt_mem_realloc(&buf->data, buf->dsize);
+ buf->dptr = buf->data + offset;
+ /* This ensures an initially NULL buf->data is now properly terminated. */
+ *buf->dptr = '\0';
+ }
}
/**
#define MoreArgs(buf) (*(buf)->dptr && (*(buf)->dptr != ';') && (*(buf)->dptr != '#'))
-struct Buffer *mutt_buffer_alloc (struct Buffer *buf, size_t size);
+void mutt_buffer_alloc (struct Buffer *buf, size_t size);
void mutt_buffer_dealloc (struct Buffer *buf);
void mutt_buffer_fix_dptr (struct Buffer *buf);
void mutt_buffer_free (struct Buffer **p);
-struct Buffer *mutt_buffer_from (const char *seed);
struct Buffer *mutt_buffer_init (struct Buffer *buf);
bool mutt_buffer_is_empty (const struct Buffer *buf);
size_t mutt_buffer_len (const struct Buffer *buf);
mutt_mem_realloc(&BufferPool, BufferPoolLen * sizeof(struct Buffer *));
while (BufferPoolCount < BufferPoolIncrement)
{
- struct Buffer *newbuf =
- mutt_buffer_alloc(mutt_buffer_new(), BufferPoolInitialBufferSize);
+ struct Buffer *newbuf = mutt_buffer_new();
+ mutt_buffer_alloc(newbuf, BufferPoolInitialBufferSize);
BufferPool[BufferPoolCount++] = newbuf;
}
}
{
TEST_CASE("Empty");
const char *str = "test";
- struct Buffer *buf = mutt_buffer_from(str);
- TEST_CHECK(mutt_buffer_add_printf(buf, "") == 0);
- TEST_CHECK(strcmp(mutt_b2s(buf), str) == 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, str);
+ TEST_CHECK(mutt_buffer_add_printf(&buf, "") == 0);
+ TEST_CHECK(strcmp(mutt_b2s(&buf), str) == 0);
+ mutt_buffer_dealloc(&buf);
}
{
TEST_CASE("Static");
const char *str = "apple";
const char *result = "testapple";
- struct Buffer *buf = mutt_buffer_from("test");
- TEST_CHECK(mutt_buffer_add_printf(buf, str) == 5);
- TEST_CHECK(strcmp(mutt_b2s(buf), result) == 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, "test");
+ TEST_CHECK(mutt_buffer_add_printf(&buf, str) == 5);
+ TEST_CHECK(strcmp(mutt_b2s(&buf), result) == 0);
+ mutt_buffer_dealloc(&buf);
}
{
"testapple banana cherry damson elderberry fig guava hawthorn ilama "
"jackfruit kumquat lemon mango nectarine olive papaya quince raspberry "
"strawberry tangerine ugli vanilla wolfberry xigua yew ziziphus";
- struct Buffer *buf = mutt_buffer_from("test");
- TEST_CHECK(mutt_buffer_add_printf(buf, str) == 195);
- TEST_CHECK(strcmp(mutt_b2s(buf), result) == 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, "test");
+ TEST_CHECK(mutt_buffer_add_printf(&buf, str) == 195);
+ TEST_CHECK(strcmp(mutt_b2s(&buf), result) == 0);
+ mutt_buffer_dealloc(&buf);
}
{
TEST_CASE("Varargs");
const char *str = "apple";
const char *result = "testapp 1234567 3.1416";
- struct Buffer *buf = mutt_buffer_from("test");
- TEST_CHECK(mutt_buffer_add_printf(buf, "%.3s %ld %3.4f", str, 1234567, 3.141592654) == 18);
- TEST_CHECK(strcmp(mutt_b2s(buf), result) == 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, "test");
+ TEST_CHECK(mutt_buffer_add_printf(&buf, "%.3s %ld %3.4f", str, 1234567, 3.141592654) == 18);
+ TEST_CHECK(strcmp(mutt_b2s(&buf), result) == 0);
+ mutt_buffer_dealloc(&buf);
}
}
}
{
- struct Buffer *buf = mutt_buffer_from("test");
- TEST_CHECK(mutt_buffer_addch(buf, 'a') == 1);
- TEST_CHECK(strcmp(mutt_b2s(buf), "testa") == 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, "test");
+ TEST_CHECK(mutt_buffer_addch(&buf, 'a') == 1);
+ TEST_CHECK(strcmp(mutt_b2s(&buf), "testa") == 0);
+ mutt_buffer_dealloc(&buf);
}
}
}
{
- struct Buffer *buf = mutt_buffer_from("test");
- TEST_CHECK(mutt_buffer_addstr(buf, "apple") == 5);
- TEST_CHECK(strcmp(mutt_b2s(buf), "testapple") == 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, "test");
+ TEST_CHECK(mutt_buffer_addstr(&buf, "apple") == 5);
+ TEST_CHECK(strcmp(mutt_b2s(&buf), "testapple") == 0);
+ mutt_buffer_dealloc(&buf);
}
}
for (size_t i = 0; i < mutt_array_size(sizes); i++)
{
TEST_CASE_("%ld", sizes[i]);
- struct Buffer *buf = mutt_buffer_from(base);
- TEST_CHECK(mutt_buffer_addstr_n(buf, str, sizes[i]) == sizes[i]);
- TEST_CHECK(strlen(mutt_b2s(buf)) == (base_len + MIN(len, sizes[i])));
- TEST_CHECK(strncmp(mutt_b2s(buf), combined, base_len + sizes[i]) == 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, base);
+ TEST_CHECK(mutt_buffer_addstr_n(&buf, str, sizes[i]) == sizes[i]);
+ TEST_CHECK(strlen(mutt_b2s(&buf)) == (base_len + MIN(len, sizes[i])));
+ TEST_CHECK(strncmp(mutt_b2s(&buf), combined, base_len + sizes[i]) == 0);
+ mutt_buffer_dealloc(&buf);
}
}
}
{
const char *str = "test";
- struct Buffer *buf = mutt_buffer_from(str);
- mutt_buffer_concat_path(buf, concat_test[i][0], concat_test[i][1]);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, str);
+ mutt_buffer_concat_path(&buf, concat_test[i][0], concat_test[i][1]);
if (concat_test[i][2])
{
- TEST_CHECK(strcmp(mutt_b2s(buf), concat_test[i][2]) == 0);
+ TEST_CHECK(strcmp(mutt_b2s(&buf), concat_test[i][2]) == 0);
}
else
{
- TEST_CHECK(strcmp(mutt_b2s(buf), str) == 0);
+ TEST_CHECK(strcmp(mutt_b2s(&buf), str) == 0);
}
- mutt_buffer_free(&buf);
+ mutt_buffer_dealloc(&buf);
}
}
}
{
const char *str = "a quick brown fox";
- struct Buffer *buf = mutt_buffer_from(str);
- mutt_buffer_fix_dptr(buf);
- TEST_CHECK(mutt_buffer_len(buf) == (strlen(str) - 1));
- mutt_buffer_free(&buf);
+ struct Buffer buf ={ 0 };
+ mutt_buffer_addstr(&buf, str);
+ mutt_buffer_fix_dptr(&buf);
+ TEST_CHECK(mutt_buffer_len(&buf) == (strlen(str)));
+ mutt_buffer_dealloc(&buf);
}
}
TEST_CHECK_(1, "mutt_buffer_free(&buf)");
TEST_CHECK(buf == NULL);
}
-
- {
- struct Buffer *buf = mutt_buffer_from("test");
- mutt_buffer_free(&buf);
- TEST_CHECK_(1, "mutt_buffer_free(&buf)");
- TEST_CHECK(buf == NULL);
- }
}
}
{
- struct Buffer *buf = mutt_buffer_from("test");
- TEST_CHECK(!mutt_buffer_is_empty(buf));
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, "test");
+ TEST_CHECK(!mutt_buffer_is_empty(&buf));
+ mutt_buffer_dealloc(&buf);
}
}
}
{
- struct Buffer *buf = mutt_buffer_from("test");
- TEST_CHECK(mutt_buffer_len(buf) != 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, "test");
+ TEST_CHECK(mutt_buffer_len(&buf) != 0);
+ mutt_buffer_dealloc(&buf);
}
}
{
TEST_CASE("Empty");
const char *str = "test";
- struct Buffer *buf = mutt_buffer_from(str);
- TEST_CHECK(mutt_buffer_printf(buf, "") == 0);
- TEST_CHECK(strcmp(mutt_b2s(buf), "") == 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, str);
+ TEST_CHECK(mutt_buffer_printf(&buf, "") == 0);
+ TEST_CHECK(strcmp(mutt_b2s(&buf), "") == 0);
+ mutt_buffer_dealloc(&buf);
}
{
TEST_CASE("Static");
const char *str = "apple";
- struct Buffer *buf = mutt_buffer_from("test");
- TEST_CHECK(mutt_buffer_printf(buf, str) == 5);
- TEST_CHECK(strcmp(mutt_b2s(buf), str) == 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, "test");
+ TEST_CHECK(mutt_buffer_printf(&buf, str) == 5);
+ TEST_CHECK(strcmp(mutt_b2s(&buf), str) == 0);
+ mutt_buffer_dealloc(&buf);
}
{
"apple banana cherry damson elderberry fig guava hawthorn ilama "
"jackfruit kumquat lemon mango nectarine olive papaya quince raspberry "
"strawberry tangerine ugli vanilla wolfberry xigua yew ziziphus";
- struct Buffer *buf = mutt_buffer_from("test");
- TEST_CHECK(mutt_buffer_printf(buf, str) == 195);
- TEST_CHECK(strcmp(mutt_b2s(buf), str) == 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, "test");
+ TEST_CHECK(mutt_buffer_printf(&buf, str) == 195);
+ TEST_CHECK(strcmp(mutt_b2s(&buf), str) == 0);
+ mutt_buffer_dealloc(&buf);
}
{
TEST_CASE("Varargs");
const char *str = "apple";
const char *result = "app 1234567 3.1416";
- struct Buffer *buf = mutt_buffer_from("test");
- TEST_CHECK(mutt_buffer_printf(buf, "%.3s %ld %3.4f", str, 1234567, 3.141592654) == 18);
- TEST_CHECK(strcmp(mutt_b2s(buf), result) == 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, "test");
+ TEST_CHECK(mutt_buffer_printf(&buf, "%.3s %ld %3.4f", str, 1234567, 3.141592654) == 18);
+ TEST_CHECK(strcmp(mutt_b2s(&buf), result) == 0);
+ mutt_buffer_dealloc(&buf);
}
}
}
{
- struct Buffer *buf = mutt_buffer_from("test");
- mutt_buffer_reset(buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, "test");
+ mutt_buffer_reset(&buf);
TEST_CHECK_(1, "mutt_buffer_reset(buf)");
- mutt_buffer_free(&buf);
+ mutt_buffer_dealloc(&buf);
}
}
{
TEST_CASE("Empty");
- struct Buffer *buf = mutt_buffer_from("test");
- mutt_buffer_strcpy(buf, "");
- TEST_CHECK(strcmp(mutt_b2s(buf), "") == 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, "test");
+ mutt_buffer_strcpy(&buf, "");
+ TEST_CHECK(strcmp(mutt_b2s(&buf), "") == 0);
+ mutt_buffer_dealloc(&buf);
}
{
TEST_CASE("String");
const char *str = "apple";
- struct Buffer *buf = mutt_buffer_from("test");
- mutt_buffer_strcpy(buf, str);
- TEST_CHECK(strcmp(mutt_b2s(buf), str) == 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, "test");
+ mutt_buffer_strcpy(&buf, str);
+ TEST_CHECK(strcmp(mutt_b2s(&buf), str) == 0);
+ mutt_buffer_dealloc(&buf);
}
}
for (size_t i = 0; i < mutt_array_size(sizes); i++)
{
TEST_CASE_("%ld", sizes[i]);
- struct Buffer *buf = mutt_buffer_from(base);
- mutt_buffer_strcpy_n(buf, str, sizes[i]);
- TEST_CHECK(strlen(mutt_b2s(buf)) == MIN(len, sizes[i]));
- TEST_CHECK(strncmp(mutt_b2s(buf), str, sizes[i]) == 0);
- mutt_buffer_free(&buf);
+ struct Buffer buf = { 0 };
+ mutt_buffer_addstr(&buf, base);
+ mutt_buffer_strcpy_n(&buf, str, sizes[i]);
+ TEST_CHECK(strlen(mutt_b2s(&buf)) == MIN(len, sizes[i]));
+ TEST_CHECK(strncmp(mutt_b2s(&buf), str, sizes[i]) == 0);
+ mutt_buffer_dealloc(&buf);
}
}
}
struct HashElem *he = cs_get_elem(cs, "Banana");
- struct Buffer *buf_val = mutt_buffer_from("yes");
- struct Buffer *buf_init = mutt_buffer_from("yes");
+ struct Buffer buf_val = { 0 };
+ mutt_buffer_addstr(&buf_val, "yes");
+ struct Buffer buf_init = { 0 };
+ mutt_buffer_addstr(&buf_init, "yes");
FILE *fp = fopen("/dev/null", "w");
if (!fp)
// Degenerate tests
- dump_config_neo(NULL, he, buf_val, buf_init, CS_DUMP_NO_FLAGS, fp);
+ dump_config_neo(NULL, he, &buf_val, &buf_init, CS_DUMP_NO_FLAGS, fp);
TEST_CHECK_(
1,
- "dump_config_neo(NULL, he, buf_val, buf_init, CS_DUMP_NO_FLAGS, fp)");
- dump_config_neo(cs, NULL, buf_val, buf_init, CS_DUMP_NO_FLAGS, fp);
+ "dump_config_neo(NULL, he, &buf_val, &buf_init, CS_DUMP_NO_FLAGS, fp)");
+ dump_config_neo(cs, NULL, &buf_val, &buf_init, CS_DUMP_NO_FLAGS, fp);
TEST_CHECK_(
1,
- "dump_config_neo(cs, NULL, buf_val, buf_init, CS_DUMP_NO_FLAGS, fp)");
- dump_config_neo(cs, he, NULL, buf_init, CS_DUMP_NO_FLAGS, fp);
+ "dump_config_neo(cs, NULL, &buf_val, &buf_init, CS_DUMP_NO_FLAGS, fp)");
+ dump_config_neo(cs, he, NULL, &buf_init, CS_DUMP_NO_FLAGS, fp);
TEST_CHECK_(
- 1, "dump_config_neo(cs, he, NULL, buf_init, CS_DUMP_NO_FLAGS, fp)");
- dump_config_neo(cs, he, buf_val, NULL, CS_DUMP_NO_FLAGS, fp);
+ 1, "dump_config_neo(cs, he, NULL, &buf_init, CS_DUMP_NO_FLAGS, fp)");
+ dump_config_neo(cs, he, &buf_val, NULL, CS_DUMP_NO_FLAGS, fp);
TEST_CHECK_(1,
- "dump_config_neo(cs, he, buf_val, NULL, CS_DUMP_NO_FLAGS, fp)");
- dump_config_neo(cs, he, buf_val, buf_init, CS_DUMP_NO_FLAGS, NULL);
+ "dump_config_neo(cs, he, &buf_val, NULL, CS_DUMP_NO_FLAGS, fp)");
+ dump_config_neo(cs, he, &buf_val, &buf_init, CS_DUMP_NO_FLAGS, NULL);
TEST_CHECK_(
1,
- "dump_config_neo(cs, he, buf_val, buf_init, CS_DUMP_NO_FLAGS, NULL)");
+ "dump_config_neo(cs, he, &buf_val, &buf_init, CS_DUMP_NO_FLAGS, NULL)");
// Normal tests
- dump_config_neo(cs, he, buf_val, buf_init, CS_DUMP_NO_FLAGS, fp);
+ dump_config_neo(cs, he, &buf_val, &buf_init, CS_DUMP_NO_FLAGS, fp);
TEST_CHECK_(
- 1, "dump_config_neo(cs, he, buf_val, buf_init, CS_DUMP_NO_FLAGS, fp)");
+ 1, "dump_config_neo(cs, he, &buf_val, &buf_init, CS_DUMP_NO_FLAGS, fp)");
- dump_config_neo(cs, he, buf_val, buf_init, CS_DUMP_ONLY_CHANGED, fp);
+ dump_config_neo(cs, he, &buf_val, &buf_init, CS_DUMP_ONLY_CHANGED, fp);
TEST_CHECK_(
1,
- "dump_config_neo(cs, he, buf_val, buf_init, CS_DUMP_ONLY_CHANGED, fp)");
+ "dump_config_neo(cs, he, &buf_val, &buf_init, CS_DUMP_ONLY_CHANGED, fp)");
- dump_config_neo(cs, he, buf_val, buf_init, CS_DUMP_SHOW_DEFAULTS, fp);
- TEST_CHECK_(1, "dump_config_neo(cs, he, buf_val, buf_init, "
+ dump_config_neo(cs, he, &buf_val, &buf_init, CS_DUMP_SHOW_DEFAULTS, fp);
+ TEST_CHECK_(1, "dump_config_neo(cs, he, &buf_val, &buf_init, "
"CS_DUMP_SHOW_DEFAULTS, fp)");
he = mutt_hash_find_elem(cs->hash, "Damson");
- dump_config_neo(cs, he, buf_val, buf_init, CS_DUMP_NO_FLAGS, fp);
+ dump_config_neo(cs, he, &buf_val, &buf_init, CS_DUMP_NO_FLAGS, fp);
TEST_CHECK_(
- 1, "dump_config_neo(cs, he, buf_val, buf_init, CS_DUMP_NO_FLAGS, fp)");
+ 1, "dump_config_neo(cs, he, &buf_val, &buf_init, CS_DUMP_NO_FLAGS, fp)");
fclose(fp);
- mutt_buffer_free(&buf_val);
- mutt_buffer_free(&buf_init);
+ mutt_buffer_dealloc(&buf_val);
+ mutt_buffer_dealloc(&buf_init);
cs_free(&cs);
}