Well, it's not pretty, but if all signal handlers recorded the last
signal in a global variable then we could do:
inline int READ (a, b, c) {
int res;
do {
res = read (a, b, c);
} while (res < 0 && (LastSignalWasUSR1 && errno == EINTR));
return res;
}