From e8f43854acfe2f5891743f5a2dbba2b52e5d23de Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 26 Dec 1996 22:08:34 +0000 Subject: [PATCH] pq/signal() portability patch. Also psql copy prompt fix. --- src/backend/bootstrap/bootstrap.c | 11 ++++++----- src/backend/libpq/pqcomm.c | 9 +++++---- src/backend/libpq/pqsignal.c | 11 ++++++----- src/backend/postmaster/postmaster.c | 19 ++++++++++--------- src/backend/storage/lmgr/proc.c | 8 ++++---- src/backend/tcop/postgres.c | 23 ++++++++++++----------- src/bin/psql/psql.c | 23 +++++++++-------------- src/include/config.h | 3 +-- src/include/libpq/pqsignal.h | 8 +------- src/interfaces/libpq/fe-exec.c | 10 ++++++---- src/interfaces/libpq/pqsignal.c | 11 ++++++----- src/interfaces/libpq/pqsignal.h | 8 +------- 12 files changed, 67 insertions(+), 77 deletions(-) diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index 5fbb8637f0..b7c25f6633 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -7,7 +7,7 @@ * Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.12 1996/11/22 04:32:41 bryanh Exp $ + * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.13 1996/12/26 22:06:59 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -33,6 +33,7 @@ #include "access/skey.h" #include "access/strat.h" #include "utils/rel.h" +#include "libpq/pqsignal.h" #include "storage/block.h" #include "storage/off.h" @@ -291,10 +292,10 @@ BootstrapMain(int argc, char *argv[]) * initialize signal handlers * ---------------- */ - signal(SIGINT, (sig_func) die); + pqsignal(SIGINT, (sig_func) die); #ifndef win32 - signal(SIGHUP, (sig_func) die); - signal(SIGTERM, (sig_func) die); + pqsignal(SIGHUP, (sig_func) die); + pqsignal(SIGTERM, (sig_func) die); #endif /* win32 */ /* -------------------- @@ -406,7 +407,7 @@ BootstrapMain(int argc, char *argv[]) * ---------------- */ #ifndef win32 - signal(SIGHUP, handle_warn); + pqsignal(SIGHUP, handle_warn); if (sigsetjmp(Warn_restart, 1) != 0) { #else diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index 1e0ace6f17..cb65472386 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.9 1996/11/24 04:05:20 bryanh Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.10 1996/12/26 22:07:03 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -36,6 +36,7 @@ */ #include #include +#include #include #include #ifndef WIN32 @@ -57,7 +58,7 @@ #include -#include /* substitute for */ +#include #include #include /* where the declarations go */ @@ -496,7 +497,7 @@ pq_regoob(void (*fptr)()) #else /* hpux */ fcntl(fd, F_SETOWN, getpid()); #endif /* hpux */ - (void) signal(SIGURG,fptr); + (void) pqsignal(SIGURG,fptr); #endif /* WIN32 */ } @@ -504,7 +505,7 @@ void pq_unregoob() { #ifndef WIN32 - signal(SIGURG,SIG_DFL); + pqsignal(SIGURG,SIG_DFL); #endif /* WIN32 */ } diff --git a/src/backend/libpq/pqsignal.c b/src/backend/libpq/pqsignal.c index 2892d702b3..0c91f50df0 100644 --- a/src/backend/libpq/pqsignal.c +++ b/src/backend/libpq/pqsignal.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/pqsignal.c,v 1.4 1996/11/18 02:25:09 bryanh Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/pqsignal.c,v 1.5 1996/12/26 22:07:08 momjian Exp $ * * NOTES * This shouldn't be in libpq, but the monitor and some other @@ -39,12 +39,16 @@ * ------------------------------------------------------------------------*/ #include +#include + #include pqsigfunc pqsignal(int signo, pqsigfunc func) { -#if defined(USE_POSIX_SIGNALS) +#if !defined(USE_POSIX_SIGNALS) + return signal(signo, func); +#else struct sigaction act, oact; act.sa_handler = func; @@ -56,8 +60,5 @@ pqsignal(int signo, pqsigfunc func) if (sigaction(signo, &act, &oact) < 0) return(SIG_ERR); return(oact.sa_handler); -#else /* !USE_POSIX_SIGNALS */ - Assert(0); - return 0; #endif /* !USE_POSIX_SIGNALS */ } diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index ec48d582b0..6146a52d37 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.29 1996/12/26 17:49:05 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.30 1996/12/26 22:07:17 momjian Exp $ * * NOTES * @@ -40,7 +40,7 @@ #include "postgres.h" -#include "libpq/pqsignal.h" /* substitute for */ +#include #include #include @@ -73,6 +73,7 @@ #include "libpq/libpq.h" #include "libpq/auth.h" #include "libpq/pqcomm.h" +#include "libpq/pqsignal.h" #include "miscadmin.h" #include "version.h" #include "lib/dllist.h" @@ -394,14 +395,14 @@ PostmasterMain(int argc, char *argv[]) if (silentflag) pmdaemonize(); - signal(SIGINT, pmdie); + pqsignal(SIGINT, pmdie); #ifndef WIN32 - signal(SIGCHLD, reaper); - signal(SIGTTIN, SIG_IGN); - signal(SIGTTOU, SIG_IGN); - signal(SIGHUP, pmdie); - signal(SIGTERM, pmdie); - signal(SIGCONT, dumpstatus); + pqsignal(SIGCHLD, reaper); + pqsignal(SIGTTIN, SIG_IGN); + pqsignal(SIGTTOU, SIG_IGN); + pqsignal(SIGHUP, pmdie); + pqsignal(SIGTERM, pmdie); + pqsignal(SIGCONT, dumpstatus); #endif /* WIN32 */ diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index cb1eda44d8..3888fdcd9e 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.11 1996/11/27 07:17:48 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.12 1996/12/26 22:07:28 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -46,7 +46,7 @@ * This is so that we can support more backends. (system-wide semaphore * sets run out pretty fast.) -ay 4/95 * - * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.11 1996/11/27 07:17:48 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.12 1996/12/26 22:07:28 momjian Exp $ */ #include #ifndef WIN32 @@ -65,7 +65,7 @@ #include "postgres.h" #include "miscadmin.h" -#include "libpq/pqsignal.h" /* substitute for */ +#include "libpq/pqsignal.h" #include "access/xact.h" #include "utils/hsearch.h" @@ -157,7 +157,7 @@ InitProcess(IPCKey key) * ------------------ */ #ifndef WIN32 - signal(SIGALRM, HandleDeadLock); + pqsignal(SIGALRM, HandleDeadLock); #endif /* WIN32 we'll have to figure out how to handle this later */ SpinAcquire(ProcStructLock); diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index be3aeb96f3..5dea9ede2a 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.23 1996/12/07 04:39:06 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.24 1996/12/26 22:07:40 momjian Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -15,11 +15,11 @@ * *------------------------------------------------------------------------- */ -#include "libpq/pqsignal.h" /* substitute for */ #include #include #include +#include #include #include #include @@ -77,6 +77,7 @@ #include "tcop/fastpath.h" #include "libpq/libpq.h" +#include "libpq/pqsignal.h" #include "rewrite/rewriteHandler.h" /* for QueryRewrite() */ /* ---------------- @@ -820,15 +821,15 @@ PostgresMain(int argc, char *argv[]) * register signal handlers. * ---------------- */ - signal(SIGINT, die); + pqsignal(SIGINT, die); #ifndef WIN32 - signal(SIGHUP, die); - signal(SIGTERM, die); - signal(SIGPIPE, die); - signal(SIGUSR1, quickdie); - signal(SIGUSR2, Async_NotifyHandler); - signal(SIGFPE, FloatExceptionHandler); + pqsignal(SIGHUP, die); + pqsignal(SIGTERM, die); + pqsignal(SIGPIPE, die); + pqsignal(SIGUSR1, quickdie); + pqsignal(SIGUSR2, Async_NotifyHandler); + pqsignal(SIGFPE, FloatExceptionHandler); #endif /* WIN32 */ /* -------------------- @@ -1246,7 +1247,7 @@ PostgresMain(int argc, char *argv[]) */ #ifndef WIN32 - signal(SIGHUP, handle_warn); + pqsignal(SIGHUP, handle_warn); if (sigsetjmp(Warn_restart, 1) != 0) { #else @@ -1271,7 +1272,7 @@ PostgresMain(int argc, char *argv[]) */ if (IsUnderPostmaster == false) { puts("\nPOSTGRES backend interactive interface"); - puts("$Revision: 1.23 $ $Date: 1996/12/07 04:39:06 $"); + puts("$Revision: 1.24 $ $Date: 1996/12/26 22:07:40 $"); } /* ---------------- diff --git a/src/bin/psql/psql.c b/src/bin/psql/psql.c index 1fceedc249..4b8583d703 100644 --- a/src/bin/psql/psql.c +++ b/src/bin/psql/psql.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.41 1996/12/26 20:56:40 bryanh Exp $ + * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.42 1996/12/26 22:07:57 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -22,6 +22,7 @@ #include #include "postgres.h" #include "libpq-fe.h" +#include "pqsignal.h" #include "stringutils.h" #include "psqlHelp.h" #ifdef NEED_STRDUP @@ -513,19 +514,10 @@ SendQuery(bool * success_p, PsqlSettings * settings, const char *query, break; case PGRES_COPY_IN: *success_p = true; - if (copy_in) { + if (copy_in) handleCopyIn(results, false, copystream); - } else { - char c; - /* - * eat extra newline still in input buffer - * - */ - fflush(stdin); - if ((c = getc(stdin)) != '\n' && c != EOF) - (void) ungetc(c, stdin); + else handleCopyIn(results, !settings->quiet, stdin); - } break; case PGRES_NONFATAL_ERROR: case PGRES_FATAL_ERROR: @@ -1676,15 +1668,18 @@ setFout(PsqlSettings * ps, char *fname) else fclose(ps->queryFout); } - if (!fname) + if (!fname) { ps->queryFout = stdout; + pqsignal(SIGPIPE, SIG_DFL); + } else { if (*fname == '|') { - signal(SIGPIPE, SIG_IGN); + pqsignal(SIGPIPE, SIG_IGN); ps->queryFout = popen(fname + 1, "w"); ps->pipe = 1; } else { ps->queryFout = fopen(fname, "w"); + pqsignal(SIGPIPE, SIG_DFL); ps->pipe = 0; } if (!ps->queryFout) { diff --git a/src/include/config.h b/src/include/config.h index bdb36d8aac..8e4d841c1a 100644 --- a/src/include/config.h +++ b/src/include/config.h @@ -85,8 +85,7 @@ #if defined(dgux) # define LINUX_ELF # define NEED_UNION_SEMUN -# define __USE_POSIX_SIGNALS -# define -DUSE_POSIX_SIGNALS +# define USE_POSIX_SIGNALS #endif #if defined(hpux) diff --git a/src/include/libpq/pqsignal.h b/src/include/libpq/pqsignal.h index c85b3443ce..389667c859 100644 --- a/src/include/libpq/pqsignal.h +++ b/src/include/libpq/pqsignal.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pqsignal.h,v 1.4 1996/11/24 04:07:17 bryanh Exp $ + * $Id: pqsignal.h,v 1.5 1996/12/26 22:08:13 momjian Exp $ * * NOTES * This shouldn't be in libpq, but the monitor and some other @@ -17,14 +17,8 @@ #ifndef PQSIGNAL_H #define PQSIGNAL_H -#include - typedef void (*pqsigfunc)(int); extern pqsigfunc pqsignal(int signo, pqsigfunc func); -#if defined(USE_POSIX_SIGNALS) -#define signal(signo, handler) pqsignal(signo, (pqsigfunc)(handler)) -#endif /* USE_POSIX_SIGNALS */ - #endif /* PQSIGNAL_H */ diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 1b3f9438ba..c43dbbb0cb 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -7,22 +7,24 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.23 1996/12/24 09:03:16 bryanh Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.24 1996/12/26 22:08:21 momjian Exp $ * *------------------------------------------------------------------------- */ #include #include #include +#include #include #include #include "postgres.h" #include "libpq/pqcomm.h" +#include "libpq/pqsignal.h" #include "libpq-fe.h" -#include #include #include TERMIOS_H_LOCATION + #ifdef TIOCGWINSZ struct winsize screen_size; #else @@ -1125,7 +1127,7 @@ PQprint(FILE *fout, fout = popen(pagerenv, "w"); if (fout) { usePipe = 1; - signal(SIGPIPE, SIG_IGN); + pqsignal(SIGPIPE, SIG_IGN); } else fout = stdout; } @@ -1217,7 +1219,7 @@ PQprint(FILE *fout, free(fieldNames); if (usePipe) { pclose(fout); - signal(SIGPIPE, SIG_DFL); + pqsignal(SIGPIPE, SIG_DFL); } if (border) free(border); diff --git a/src/interfaces/libpq/pqsignal.c b/src/interfaces/libpq/pqsignal.c index 48868ef06a..a177012051 100644 --- a/src/interfaces/libpq/pqsignal.c +++ b/src/interfaces/libpq/pqsignal.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq/pqsignal.c,v 1.2 1996/11/08 06:02:30 momjian Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq/pqsignal.c,v 1.3 1996/12/26 22:08:30 momjian Exp $ * * NOTES * This shouldn't be in libpq, but the monitor and some other @@ -18,12 +18,16 @@ */ #include +#include + #include "libpq/pqsignal.h" pqsigfunc pqsignal(int signo, pqsigfunc func) { -#if defined(USE_POSIX_SIGNALS) +#if !defined(USE_POSIX_SIGNALS) + return signal(signo, func); +#else struct sigaction act, oact; act.sa_handler = func; @@ -35,8 +39,5 @@ pqsignal(int signo, pqsigfunc func) if (sigaction(signo, &act, &oact) < 0) return(SIG_ERR); return(oact.sa_handler); -#else /* !USE_POSIX_SIGNALS */ - exit(1); /* this should never be reached, pqsignal should only - be called if USE_POSIX_SIGNALS is true*/ #endif /* !USE_POSIX_SIGNALS */ } diff --git a/src/interfaces/libpq/pqsignal.h b/src/interfaces/libpq/pqsignal.h index 77d01b0a8e..4d57549443 100644 --- a/src/interfaces/libpq/pqsignal.h +++ b/src/interfaces/libpq/pqsignal.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pqsignal.h,v 1.1.1.1 1996/07/09 06:22:17 scrappy Exp $ + * $Id: pqsignal.h,v 1.2 1996/12/26 22:08:34 momjian Exp $ * * NOTES * This shouldn't be in libpq, but the monitor and some other @@ -17,16 +17,10 @@ #ifndef PQSIGNAL_H #define PQSIGNAL_H -#include - #include "c.h" typedef void (*pqsigfunc)(int); extern pqsigfunc pqsignal(int signo, pqsigfunc func); -#if defined(USE_POSIX_SIGNALS) -#define signal(signo, handler) pqsignal(signo, (pqsigfunc)(handler)) -#endif /* USE_POSIX_SIGNALS */ - #endif /* PQSIGNAL_H */