diff options
author | Ekaitz Zarraga <ekaitz@elenq.tech> | 2025-08-12 00:35:18 +0200 |
---|---|---|
committer | Ekaitz Zarraga <ekaitz@elenq.tech> | 2025-08-12 00:36:14 +0200 |
commit | 5dd98385e03b9cc7c912b1b50f7c406df117a9af (patch) | |
tree | 2fb914bac78ce8cfe77455ae47d710a4cbd0d1db /src | |
parent | 85088f13c5653174c27f54faac5afd89fbb10655 (diff) |
piece-table: Don't allocate in piece_table_to_string
`piece_table_to_string` now receives a buffer and we also provide a
function that returns the length of the piece table.
TODO: the `piece_table_to_string` adds null termination, that makes the
buffer needed `piece_table_length(pt) + 1`. This we should document or
do more obvious.
Diffstat (limited to 'src')
-rw-r--r-- | src/piece-table.c | 16 | ||||
-rw-r--r-- | src/piece-table.h | 3 |
2 files changed, 12 insertions, 7 deletions
diff --git a/src/piece-table.c b/src/piece-table.c index a8ddd1e..b29f3be 100644 --- a/src/piece-table.c +++ b/src/piece-table.c @@ -415,15 +415,19 @@ piece_table_index (piece_table *pt, size_t pos) pt->cached->start + pos - pt->cached_offset); } -char * -piece_table_to_string (piece_table *pt) +void +piece_table_to_string (piece_table *pt, char *buf) { size_t i; - char *ret = malloc (sizeof (*ret) * pt->length + 1); for (i = 0; i < pt->length; i++) { - ret[i] = piece_table_index(pt, i); + buf[i] = piece_table_index (pt, i); } - ret[i] = '\0'; - return ret; + buf[i] = '\0'; +} + +size_t +piece_table_length (piece_table *pt) +{ + return pt->length; } diff --git a/src/piece-table.h b/src/piece-table.h index c9d6601..e90d2fa 100644 --- a/src/piece-table.h +++ b/src/piece-table.h @@ -29,6 +29,7 @@ char piece_table_index (piece_table *pt, size_t pos); void piece_table_insert (piece_table *pt, size_t pos, char *in, size_t len); void piece_table_delete (piece_table *pt, size_t pos, size_t len); -char *piece_table_to_string (piece_table *pt); +void piece_table_to_string (piece_table *pt, char *buf); +size_t piece_table_length (piece_table *pt); #endif |