Jeff King <p...@peff.net> writes:

> On Fri, May 12, 2017 at 11:28:50PM -0400, Jeff King wrote:
>
>> +static NORETURN void BUG_vfl(const char *file, int line, const char *fmt, 
>> va_list params)
>> +{
>> +    char prefix[256];
>> +
>> +    /* truncation via snprintf is OK here */
>> +    if (file)
>> +            snprintf(prefix, sizeof(prefix), "BUG: %s:%d: ", file, line);
>> +    else
>> +            snprintf(prefix, sizeof(prefix), "BUG: ");
>> +
>> +    vreportf(prefix, fmt, params);
>> +    abort();
>> +}
>
> I used vreportf() here to match die(). But the two things that function
> does are:
>
>   1. Respect error_handle. But after bw/forking-and-threading is merged,
>      nobody will ever set error_handle (and I just sent a patch to drop
>      it entirely).
>
>   2. Quotes non-printable characters. I don't know how useful this is.
>      Most of the assertion messages are pretty vanilla (because anything
>      that relies on user input probably should be a regular die, not an
>      assertion failure). But a few of them do actually print arbitrary
>      strings in a reasonable way (e.g., a BUG() which is handling user
>      string which was supposed to be vetted by an earlier function is
>      still a reasonable assertion, but it's useful to show the string).
>
> So an alternative would be just:
>
>   fprintf(stderr, "BUG: ");
>   if (file)
>       fprintf(stderr, "%s:%d ", file, line);
>   vfprintf(stderr, fmt, params);
>   fputc('\n', stderr);
>
> which is perhaps a bit simpler (not much in lines of code, but there's
> no extra buffer to reason about). But given the discussion in (2) above,
> it's probably worth continuing to use vreportf.

Yeah, that does sound sensible.  Thanks.

Reply via email to