As a first step towards safe signal handling, improve the h_int()
authorschwarze <schwarze@openbsd.org>
Wed, 1 Sep 2021 14:28:15 +0000 (14:28 +0000)
committerschwarze <schwarze@openbsd.org>
Wed, 1 Sep 2021 14:28:15 +0000 (14:28 +0000)
commit3e13b57bacccf623c8b2fab1e5dd87af6026466b
treecf11c389363dbf08f663769900aa1cc5291959c9
parent1be9dae600aab5404a2f31a926b46f16f5c70297
As a first step towards safe signal handling, improve the h_int()
and h_winch() signal handlers to make one single store to a
sig_atomic_t variable.  Note that the h_hup() and h_term() signal
handlers are still unsafe after this commit because they also set
the "killersig" (how fitting!) field in a global struct.

Despite storing information in static global variables rather than
in structs passed around as arguments, this patch does not cause a
change in behaviour because there is always exactly one GS object,
initialized using gs_init() called from the top of main(), and
screen_init() stores a pointer to this one and only GS object in
the .gp member of each and every SCR object.  Talk about useless
abstraction...

Problem pointed out by deraadt@.
Patch from Tim <trondd at kagu hyphen tsuchi dot com> on tech@.
OK deraadt@.
usr.bin/vi/cl/cl.h
usr.bin/vi/cl/cl_funcs.c
usr.bin/vi/cl/cl_main.c
usr.bin/vi/cl/cl_read.c