From cefc0d927f11f9749c082d58d65c3e9ac007e8a1 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Fri, 7 Dec 2007 11:34:47 +0000 Subject: 24179: use queue_signals() for 24170 24180: back off strerror_r() patch, except for use of temporary var --- ChangeLog | 4 ++++ Src/exec.c | 6 ++---- Src/utils.c | 27 --------------------------- configure.ac | 2 +- 4 files changed, 7 insertions(+), 32 deletions(-) diff --git a/ChangeLog b/ChangeLog index 87b322119..9d9d15aa4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2007-12-07 Peter Stephenson + * 24180: configure.ac, Src/utils.c: back off (most of) 24148. + + * 24179: Src/exec.c: alter 241770 to use queue_signals(). + * Guillaume Chazarain: 24170: Src/exec.c: block interrupts around fork since it may mess with locks. diff --git a/Src/exec.c b/Src/exec.c index 6f16b9e87..9695011e3 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -229,7 +229,6 @@ zfork(struct timeval *tv) { pid_t pid; struct timezone dummy_tz; - sigset_t signals; /* * Is anybody willing to explain this test? @@ -240,10 +239,9 @@ zfork(struct timeval *tv) } if (tv) gettimeofday(tv, &dummy_tz); - sigfillset(&signals); - signals = signal_block(signals); + queue_signals(); pid = fork(); - signal_setmask(signals); + unqueue_signals(); if (pid == -1) { zerr("fork failed: %e", errno); return -1; diff --git a/Src/utils.c b/Src/utils.c index 7c22a277f..d776d7cb3 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -310,34 +310,7 @@ zerrmsg(FILE *file, const char *fmt, va_list ap) errflag = 1; return; } -#ifdef HAVE_STRERROR_R - /* - * There are two incompatible strerror_r()s floating round. - * The GNU extension refuses to copy the message into the - * buffer if it can return a constant string. To suppress it - * we need to define _XOPEN_SOURCE to 600. I don't dare do - * this because we're already depending on _GNU_SOURCE. So - * try to handle both by looking for errno being set (for the - * standard version failing) or errbuf being left untouched - * (for the GNU version). One presumes that if strerror_r() - * didn't copy anything to errbuf, then it's safe to - * call strerror() to get the string. - * - * This is a mess, but it's about a decade and half - * too late to shirk from messes in the source. - */ - olderrno = errno; - errno = 0; - errbuf[0] = '\0'; - strerror_r(num, errbuf, ERRBUFSIZE); - if (errno || errbuf[0] == '\0') - errmsg = strerror(num); - else - errmsg = errbuf; - errno = olderrno; -#else errmsg = strerror(num); -#endif /* If the message is not about I/O problems, it looks better * * if we uncapitalize the first letter of the message */ if (num == EIO) diff --git a/configure.ac b/configure.ac index c59af506b..c43d42a72 100644 --- a/configure.ac +++ b/configure.ac @@ -1157,7 +1157,7 @@ AC_CHECK_FUNCS(strftime strptime mktime timelocal \ getlogin getpwent getpwnam getpwuid getgrgid getgrnam \ initgroups nis_list \ setuid seteuid setreuid setresuid setsid \ - memcpy memmove strstr strerror strerror_r \ + memcpy memmove strstr strerror \ getrlimit getrusage \ setlocale \ uname \ -- cgit 1.4.1