Re: [PATCH 03/10] reftable/basics: provide new `reftable_buf` interface
Patrick Steinhardt <ps@pks.im> writes:
Show 6 quoted lines
> Implement a new `reftable_buf` interface that will replace Git's own
> `strbuf` interface. This is done due to three reasons:
>
> - The `strbuf` interfaces do not handle memory allocation failures and
> instead causes us to die. This is okay in the context of Git, but is
> not context of the reftable library, which is supposed to be usable
Show 15 quoted lines
> by third-party applications.
>
> - The `strbuf` interface is quite deeply tied into Git, which makes it
> hard to use the reftable library as a standalone library. Any
> dependent would have to carefully extract the relevant parts of it
> to make things work, which is not all that sensible.
>
> - The `strbuf` interface does not use the pluggable allocators that
> can be set up via `refatble_set_alloc()`.
>
> So we have good reasons to use our own type, and the implementation is
> rather trivial. Implement our own type. Conversion of the reftable
> library will be handled in subsequent commits.
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
Show 24 quoted lines
> diff --git a/reftable/basics.h b/reftable/basics.h
> index 4c9ef0fe6c5..4cf3f0e7593 100644
> --- a/reftable/basics.h
> +++ b/reftable/basics.h
> @@ -16,6 +16,22 @@ license that can be found in the LICENSE file or at
> #include "system.h"
> #include "reftable-basics.h"
>
> +struct reftable_buf {
> + size_t alloc;
> + size_t len;
> + char *buf;
> +};
> +#define REFTABLE_BUF_INIT { 0 }
> +
> +void reftable_buf_init(struct reftable_buf *buf);
> +void reftable_buf_release(struct reftable_buf *buf);
> +void reftable_buf_reset(struct reftable_buf *buf);
> +int reftable_buf_setlen(struct reftable_buf *buf, size_t len);
> +int reftable_buf_cmp(const struct reftable_buf *a, const struct reftable_buf *b);
> +int reftable_buf_add(struct reftable_buf *buf, const void *data, size_t len);
> +int reftable_buf_addstr(struct reftable_buf *buf, const char *s);
> +char *reftable_buf_detach(struct reftable_buf *buf);
> +Nit: would be nice to have some comments explaining the functions here.
I know most of them are self-explanatory and similar to strbuf, but
since this is supposed to be isolated, it would be nice.
[snip]