From: David Turner <novalis@novalis.org>
To: Jeff King <peff@peff.net>
Cc: git@vger.kernel.org, mhagger@alum.mit.edu,
David Turner <dturner@twosigma.com>
Subject: Re: thoughts on error passing, was Re: [PATCH 2/2] fsck: handle bad trees like other errors
Date: Tue, 27 Sep 2016 18:57:34 -0400 [thread overview]
Message-ID: <1475017054.13103.3.camel@frank> (raw)
In-Reply-To: <20160927191955.mympqgylrxhkp24n@sigill.intra.peff.net>
On Tue, 2016-09-27 at 15:19 -0400, Jeff King wrote:
> On Tue, Sep 27, 2016 at 11:19:34AM -0400, David Turner wrote:
>
> > > typedef void (*err_fn)(const char *, ...);
> > >
> > > static int decode_tree_entry(struct tree_desc *desc,
> > > const char *buf, unsigned long size,
> > > err_fn err)
> > > {
> > > ...
> > > if (size < 23 || buf[size - 21]) {
> > > err("too-short tree object");
> > > return -1;
> > > }
> > > }
> > >
> > > I dunno. Maybe that is overengineering. I guess we only hit the strbufs
> > > in the error path (which used to die!), so nobody really cares that much
> > > about the extra allocation.
> >
> > I don't really like err_fn because:
> > (a) without a baton, it's somewhat less general (or less thread-safe)
> > than the strbuf approach and
> > (b) with a baton, it's two arguments instead of one.
>
> I'm going to ramble for a minute, and I don't think it's worth exploring
> for this patch series in particular, so feel free to ignore me.
>
> I think this error concept could be extended fairly elegantly with
> something like:
>
> typedef void (*err_fn)(void *, const char *fmt, va_list ap)
> struct error_context {
> err_fn fn;
> void *data;
> };
>
> int report_error(struct error_context *err, const char *fmt, ...)
> {
> if (err->fn) {
> va_list ap;
> va_start(ap, fmt);
> err->fn(err->data, fmt, ap);
> va_end(ap);
> }
> return -1;
> }
>
> Then low-level functions just take a context and do:
>
> return report_error(&err, "some error: %s", foo);
>
> And then the callers would pick one of a few generic error contexts:
>
> - passing NULL silences the errors
Overall, +1.
I guess I would rather have a sentinel value for silencing errors,
because I'm worried that someone might read NULL as "don't handle the
errors, just die". Of course, code review would hopefully catch this,
but even so, it would be easier to read foo(x, y, silence_errors) than
foo(x, y, null).
next prev parent reply other threads:[~2016-09-27 22:57 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-26 19:32 [PATCH 0/2] tree-walk improvements David Turner
2016-09-26 19:32 ` [PATCH 1/2] tree-walk: be more specific about corrupt tree errors David Turner
2016-09-27 5:14 ` Jeff King
2016-09-27 5:35 ` Junio C Hamano
2016-09-27 15:21 ` David Turner
2016-09-26 19:32 ` [PATCH 2/2] fsck: handle bad trees like other errors David Turner
2016-09-26 19:51 ` Junio C Hamano
2016-09-26 20:08 ` Junio C Hamano
2016-09-26 20:11 ` Junio C Hamano
2016-09-27 5:27 ` Jeff King
2016-09-27 15:19 ` David Turner
2016-09-27 19:19 ` thoughts on error passing, was " Jeff King
2016-09-27 22:57 ` David Turner [this message]
2016-09-28 6:54 ` Jeff King
2016-09-28 5:01 ` Michael Haggerty
2016-09-28 8:58 ` Jeff King
2016-09-28 18:02 ` Junio C Hamano
2016-09-26 19:39 ` [PATCH 0/2] tree-walk improvements Stefan Beller
2016-09-26 19:43 ` Junio C Hamano
2016-09-26 20:22 ` David Turner
2016-09-27 0:35 ` Junio C Hamano
2016-09-26 21:04 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1475017054.13103.3.camel@frank \
--to=novalis@novalis.org \
--cc=dturner@twosigma.com \
--cc=git@vger.kernel.org \
--cc=mhagger@alum.mit.edu \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).