From: "Shawn O. Pearce" <spearce@spearce.org>
To: Nicolas Pitre <nico@cam.org>
Cc: Junio C Hamano <gitster@pobox.com>,
Pieter de Bie <pdebie@ai.rug.nl>,
Pierre Habouzit <madcoder@debian.org>,
git@vger.kernel.org, Scott Chacon <schacon@gmail.com>
Subject: Re: libgit2 - a true git library
Date: Fri, 31 Oct 2008 18:52:17 -0700 [thread overview]
Message-ID: <20081101015217.GJ14786@spearce.org> (raw)
In-Reply-To: <alpine.LFD.2.00.0810312135190.13034@xanadu.home>
Nicolas Pitre <nico@cam.org> wrote:
> On Fri, 31 Oct 2008, Shawn O. Pearce wrote:
>
> > > Both the negative code and errno style are lightweight in the common "no
> > > error" case. The errno style is probably more handy for those functions
> > > returning a pointer which should be NULL in the error case.
> >
> > I'm sticking with return a negative code for now, to the extent
> > that some functions which return a pointer but also have many
> > common failure modes (e.g. git_odb_open) use an output parameter
> > as their first arg, so the error code can be returned as the result
> > of the function.
>
> Actually, the pointer-returning functions can encode error cases into a
> "negative" pointer. See include/linux/err.h for example.
>
> void *ptr = git_alloc_foo(...);
> if (IS_ERR(ptr))
> die("git_alloc_foo failed: %s", git_strerr(PTR_ERR(ptr)));
Oh, good point. We could also stagger the errors so they are
always odd, and never return an odd-alignment pointer from a
successful function. Thus IS_ERR can be written as:
#define IS_ERR(ptr) (((intptr_t)(ptr)) & 1)
which is quite cheap, and given the (probably required anyway)
aligned allocation policy means we still have 2^31 possible
error codes available.
--
Shawn.
next prev parent reply other threads:[~2008-11-01 1:53 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-31 17:07 libgit2 - a true git library Shawn O. Pearce
2008-10-31 17:28 ` Pieter de Bie
2008-10-31 17:29 ` Pieter de Bie
2008-10-31 17:47 ` Pierre Habouzit
2008-10-31 18:41 ` Shawn O. Pearce
2008-10-31 18:54 ` Pierre Habouzit
2008-10-31 19:57 ` Shawn O. Pearce
2008-10-31 20:12 ` Pierre Habouzit
2008-10-31 20:05 ` Junio C Hamano
2008-10-31 21:58 ` Shawn O. Pearce
2008-11-01 17:30 ` Pierre Habouzit
2008-11-01 18:44 ` Andreas Ericsson
2008-11-01 18:48 ` Pierre Habouzit
2008-11-01 20:29 ` Shawn O. Pearce
2008-11-01 21:58 ` Andreas Ericsson
2008-11-02 1:50 ` Shawn O. Pearce
2008-11-03 10:17 ` Andreas Ericsson
2008-11-02 1:56 ` Shawn O. Pearce
2008-11-02 9:25 ` Pierre Habouzit
2008-10-31 20:24 ` Nicolas Pitre
2008-10-31 20:29 ` david
2008-10-31 20:56 ` Nicolas Pitre
2008-10-31 21:43 ` Shawn O. Pearce
2008-10-31 21:50 ` Shawn O. Pearce
2008-10-31 21:51 ` Pierre Habouzit
2008-10-31 21:31 ` Pierre Habouzit
2008-10-31 22:10 ` Nicolas Pitre
2008-11-01 10:52 ` Andreas Ericsson
2008-10-31 23:24 ` Pieter de Bie
2008-10-31 23:28 ` Shawn O. Pearce
2008-10-31 23:49 ` Junio C Hamano
2008-11-01 0:02 ` Pierre Habouzit
2008-11-01 0:19 ` Shawn O. Pearce
2008-11-01 1:02 ` Pierre Habouzit
2008-11-01 0:13 ` Shawn O. Pearce
2008-11-01 1:15 ` Nicolas Pitre
2008-11-01 1:19 ` Shawn O. Pearce
2008-11-01 1:45 ` Nicolas Pitre
2008-11-01 1:52 ` Shawn O. Pearce [this message]
2008-11-01 2:26 ` Johannes Schindelin
2008-11-01 11:01 ` Pierre Habouzit
2008-11-01 13:50 ` Nicolas Pitre
2008-11-01 17:01 ` Pierre Habouzit
2008-11-01 20:26 ` Johannes Schindelin
2008-10-31 23:14 ` Junio C Hamano
2008-10-31 23:33 ` Pierre Habouzit
2008-10-31 23:41 ` Shawn O. Pearce
2008-10-31 23:56 ` Jakub Narebski
2008-11-01 0:41 ` david
2008-11-01 1:00 ` Shawn O. Pearce
2008-11-01 1:04 ` david
2008-11-01 1:08 ` Pierre Habouzit
2008-11-01 1:33 ` Nicolas Pitre
2008-11-01 1:38 ` Pierre Habouzit
2008-11-01 1:49 ` Nicolas Pitre
2008-11-01 1:43 ` Shawn O. Pearce
2008-11-01 1:53 ` Nicolas Pitre
2008-11-01 22:57 ` Shawn O. Pearce
2008-11-02 0:26 ` Scott Chacon
2008-11-02 1:07 ` Scott Chacon
2008-11-02 1:36 ` Shawn O. Pearce
2008-11-02 5:09 ` David Brown
2008-11-03 16:20 ` Shawn O. Pearce
2008-11-01 1:06 ` Pierre Habouzit
2008-11-01 1:36 ` david
2008-10-31 20:24 ` Brian Gernhardt
2008-10-31 21:59 ` Andreas Ericsson
2008-10-31 22:01 ` Shawn O. Pearce
2008-10-31 22:51 ` Junio C Hamano
2008-11-01 11:17 ` Andreas Ericsson
2008-10-31 23:22 ` Johannes Schindelin
2008-10-31 23:18 ` Bruno Santos
2008-10-31 23:25 ` Shawn O. Pearce
2008-11-01 19:18 ` Andreas Ericsson
2008-11-01 20:42 ` Shawn O. Pearce
2008-11-02 2:30 ` Johannes Schindelin
2008-11-02 9:19 ` Pierre Habouzit
2008-11-03 13:08 ` Andreas Ericsson
2008-11-08 13:26 ` Steve Frécinaux
2008-11-08 14:35 ` Andreas Ericsson
2008-11-08 17:27 ` Pierre Habouzit
2008-11-09 10:17 ` Andreas Ericsson
2008-11-09 21:02 ` Shawn O. Pearce
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081101015217.GJ14786@spearce.org \
--to=spearce@spearce.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=madcoder@debian.org \
--cc=nico@cam.org \
--cc=pdebie@ai.rug.nl \
--cc=schacon@gmail.com \
/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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.