diff --git a/src/bin/pg_dump/parallel.c b/src/bin/pg_dump/parallel.c index 7647271c48be45842a8ffbf2665440709626fc6e..4549d11e2023791ab445fea7d2c8400371202a78 100644 --- a/src/bin/pg_dump/parallel.c +++ b/src/bin/pg_dump/parallel.c @@ -137,8 +137,18 @@ static volatile DumpSignalInformation signal_info; static CRITICAL_SECTION signal_info_lock; #endif -/* Used from signal handlers, no buffering */ -#define write_stderr(str) write(fileno(stderr), str, strlen(str)) +/* + * Write a simple string to stderr --- must be safe in a signal handler. + * We ignore the write() result since there's not much we could do about it. + * Certain compilers make that harder than it ought to be. + */ +#define write_stderr(str) \ + do { \ + const char *str_ = (str); \ + int rc_; \ + rc_ = write(fileno(stderr), str_, strlen(str_)); \ + (void) rc_; \ + } while (0) #ifdef WIN32 diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c index b8bdcc751a201dc04e8dc0c6cff9fef3d257453a..2450b9c3f83cac0ee4248d9f1732057850547951 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -235,8 +235,18 @@ static PGcancel *volatile cancelConn = NULL; static CRITICAL_SECTION cancelConnLock; #endif -/* Used from signal handlers, no buffering */ -#define write_stderr(str) write(fileno(stderr), str, strlen(str)) +/* + * Write a simple string to stderr --- must be safe in a signal handler. + * We ignore the write() result since there's not much we could do about it. + * Certain compilers make that harder than it ought to be. + */ +#define write_stderr(str) \ + do { \ + const char *str_ = (str); \ + int rc_; \ + rc_ = write(fileno(stderr), str_, strlen(str_)); \ + (void) rc_; \ + } while (0) #ifndef WIN32 @@ -245,7 +255,6 @@ static void handle_sigint(SIGNAL_ARGS) { int save_errno = errno; - int rc; char errbuf[256]; /* if we are waiting for input, longjmp out of it */ @@ -262,16 +271,11 @@ handle_sigint(SIGNAL_ARGS) if (cancelConn != NULL) { if (PQcancel(cancelConn, errbuf, sizeof(errbuf))) - { - rc = write_stderr("Cancel request sent\n"); - (void) rc; /* ignore errors, nothing we can do here */ - } + write_stderr("Cancel request sent\n"); else { - rc = write_stderr("Could not send cancel request: "); - (void) rc; /* ignore errors, nothing we can do here */ - rc = write_stderr(errbuf); - (void) rc; /* ignore errors, nothing we can do here */ + write_stderr("Could not send cancel request: "); + write_stderr(errbuf); } }