From: karthik nayak Date: Fri, 11 Oct 2024 10:03:39 GMT Subject: Re: [PATCH 03/10] reftable/basics: provide new `reftable_buf` interface Message-ID: In-Reply-To: <24e31619b936166404b801dde0e2bca478328386.1728629612.git.ps@pks.im> Patrick Steinhardt 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 [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]