|
Lines 84-104
int signal_fd_set (fd_set *rfds, int extra_fd)
Link Here
|
| 84 |
return signal_pipe[0] > extra_fd ? signal_pipe[0] : extra_fd; |
84 |
return signal_pipe[0] > extra_fd ? signal_pipe[0] : extra_fd; |
| 85 |
} |
85 |
} |
| 86 |
|
86 |
|
|
|
87 |
/* Check if we have a signal or not */ |
| 88 |
int signal_exists (const fd_set *rfds) |
| 89 |
{ |
| 90 |
if (signal_signal || (rfds && FD_ISSET (signal_pipe[0], rfds))) |
| 91 |
return 0; |
| 92 |
return -1; |
| 93 |
} |
| 94 |
|
| 87 |
/* Read a signal from the signal pipe. Returns 0 if there is |
95 |
/* Read a signal from the signal pipe. Returns 0 if there is |
| 88 |
* no signal, -1 on error (and sets errno appropriately), and |
96 |
* no signal, -1 on error (and sets errno appropriately), and |
| 89 |
* your signal on success */ |
97 |
* your signal on success */ |
| 90 |
int signal_read (const fd_set *rfds) |
98 |
int signal_read (fd_set *rfds) |
| 91 |
{ |
99 |
{ |
| 92 |
int sig; |
100 |
int sig = -1; |
| 93 |
|
101 |
|
| 94 |
if (signal_signal) |
102 |
if (signal_signal) { |
| 95 |
return signal_signal; |
103 |
sig = signal_signal; |
|
|
104 |
signal_signal = 0; |
| 105 |
} |
| 96 |
|
106 |
|
| 97 |
if (! rfds || ! FD_ISSET (signal_pipe[0], rfds)) |
107 |
if (rfds && FD_ISSET (signal_pipe[0], rfds)) { |
| 98 |
return -1; |
108 |
read (signal_pipe[0], &sig, sizeof (sig)); |
| 99 |
|
109 |
FD_CLR (signal_pipe[0], rfds); |
| 100 |
if (read (signal_pipe[0], &sig, sizeof (sig)) == -1) |
110 |
} |
| 101 |
return -1; |
|
|
| 102 |
|
111 |
|
| 103 |
return sig; |
112 |
return sig; |
| 104 |
} |
113 |
} |