On Mon, Sep 18, 2017 at 10:50 PM, Larry McVoy
<lm(a)mcvoy.com> wrote:
So in the BitKeeper source, perror is redifined
to my_perror which is
this:
void
my_perror(char *file, int line, char *msg)
{
char *p = 0;
int save = errno;
if (p = getenv("_BK_VERSION")) {
if (strneq(p, "bk-", 3)) p += 3;
fprintf(stderr, "%s:%d (%s): ", file, line, p);
} else {
fprintf(stderr, "%s:%d: ", file, line);
}
if (p = strerror(errno)) {
fprintf(stderr, "%s: %s\n", msg, p);
} else {
fprintf(stderr, "%s: errno=%d\n", msg, errno);
}
errno = save;
}
libc should do that.
???+1, indeed!??? - knowing where the the error came from (file and line) is
huge. Yeah it means putting it in the preprocessor, which has some issues;
but it comes back to a previous comment I have made -- I really believe a
serious production language needs a preprocessor that is carefully used
because there are places (like this one) that just makes the right things
happen.
Yep. And the _BK_VERSION stuff is obviously BK specific, but if there was
a way to generalize that so you could have _APPLICATION_VERSION or something
and that got printed with the error then you get stuff like
slib.c:1653 (bk-7.3): open failed: permission denied
which is way way way more useful than just permission denied.