scaffold: first iteration of die()

laumann
May 11, 2023, 7:44 AM
QE5NVXPUTYQD44LB7P3TK4LAZVJ4PVKQUUE6BX6KB32SGTYAG7HAC

Dependencies

  • [2] XTKRT6OQ format the codebase
  • [3] Y26WT3ZF change: decode message, description and timestamp

Change contents

  • edit in scaffold.h at line 8
    [3.165]
    [3.165]
    /* The die() declaration is stolen from git-compat-util.h */
    void die(const char *err, ...) __attribute__((format(printf, 1, 2)));
  • edit in scaffold.c at line 3
    [3.248]
    [3.248]
    #include <stdarg.h>
    #include <string.h>
    #include <ctype.h>
  • replacement in scaffold.c at line 8
    [3.271][3.271:330]()
    /**
    * Expand to support varargs like a regular printf
    */
    [3.271]
    [2.0]
    static void
    die_routine(const char *err, va_list params)
    {
    char msg[4096];
    char *p, *pend;
    pend = msg + sizeof(msg);
    memcpy(msg, "fatal: ", 7); /* FIXME: make configurable */
    p = msg + 7;
    if (vsnprintf(p, (size_t)(pend - p), err, params) < 0)
    *p = '\0'; /* vsnprintf() failed, clip at prefix */
    for (; p != pend - 1 && *p; p++)
    if (iscntrl(*p) && *p != '\t' && *p != '\n')
    *p = '?';
    *(p++) = '\n';
    *(p++) = '\0';
    fflush(stderr);
    fprintf(stderr, msg); /* git has write_in_full(2, msg, p - msg) */
    }
  • replacement in scaffold.c at line 33
    [2.5][2.5:26]()
    die(const char *msg)
    [2.5]
    [3.356]
    die(const char *err, ...)
  • replacement in scaffold.c at line 35
    [3.358][3.358:392]()
    fprintf(stderr, msg);
    exit(57);
    [3.358]
    [3.392]
    va_list params;
    va_start(params, err);
    die_routine(err, params);
    va_end(params);
    exit(128);