Patrick Steinhardt <ps@xxxxxx> writes: > 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 s/not/not in the/ > 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@xxxxxx> [snip] > 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]
Attachment:
signature.asc
Description: PGP signature