mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00:00
![Johannes Schindelin](/assets/img/avatar_default.png)
Ind8193743e0
(usage.c: add BUG() function, 2017-05-12), a new macro was introduced to use for reporting bugs instead of die(). It was then subsequently used to convert one single caller in588a538ae5
(setup_git_env: convert die("BUG") to BUG(), 2017-05-12). The cover letter of the patch series containing this patch (cf 20170513032414.mfrwabt4hovujde2@sigill.intra.peff.net) is not terribly clear why only one call site was converted, or what the plan is for other, similar calls to die() to report bugs. Let's just convert all remaining ones in one fell swoop. This trick was performed by this invocation: sed -i 's/die("BUG: /BUG("/g' $(git grep -l 'die("BUG' \*.c) Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
62 lines
1.1 KiB
C
62 lines
1.1 KiB
C
#include "cache.h"
|
|
#include "sigchain.h"
|
|
|
|
#define SIGCHAIN_MAX_SIGNALS 32
|
|
|
|
struct sigchain_signal {
|
|
sigchain_fun *old;
|
|
int n;
|
|
int alloc;
|
|
};
|
|
static struct sigchain_signal signals[SIGCHAIN_MAX_SIGNALS];
|
|
|
|
static void check_signum(int sig)
|
|
{
|
|
if (sig < 1 || sig >= SIGCHAIN_MAX_SIGNALS)
|
|
BUG("signal out of range: %d", sig);
|
|
}
|
|
|
|
int sigchain_push(int sig, sigchain_fun f)
|
|
{
|
|
struct sigchain_signal *s = signals + sig;
|
|
check_signum(sig);
|
|
|
|
ALLOC_GROW(s->old, s->n + 1, s->alloc);
|
|
s->old[s->n] = signal(sig, f);
|
|
if (s->old[s->n] == SIG_ERR)
|
|
return -1;
|
|
s->n++;
|
|
return 0;
|
|
}
|
|
|
|
int sigchain_pop(int sig)
|
|
{
|
|
struct sigchain_signal *s = signals + sig;
|
|
check_signum(sig);
|
|
if (s->n < 1)
|
|
return 0;
|
|
|
|
if (signal(sig, s->old[s->n - 1]) == SIG_ERR)
|
|
return -1;
|
|
s->n--;
|
|
return 0;
|
|
}
|
|
|
|
void sigchain_push_common(sigchain_fun f)
|
|
{
|
|
sigchain_push(SIGINT, f);
|
|
sigchain_push(SIGHUP, f);
|
|
sigchain_push(SIGTERM, f);
|
|
sigchain_push(SIGQUIT, f);
|
|
sigchain_push(SIGPIPE, f);
|
|
}
|
|
|
|
void sigchain_pop_common(void)
|
|
{
|
|
sigchain_pop(SIGPIPE);
|
|
sigchain_pop(SIGQUIT);
|
|
sigchain_pop(SIGTERM);
|
|
sigchain_pop(SIGHUP);
|
|
sigchain_pop(SIGINT);
|
|
}
|