pgsql: Provide a variant of simple_prompt() that can be interrupted by

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Provide a variant of simple_prompt() that can be interrupted by
Date: 2021-11-18 00:10:04
Message-ID: E1mnV08-0001sA-KI@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Provide a variant of simple_prompt() that can be interrupted by ^C.

Up to now, you couldn't escape out of psql's \password command
by typing control-C (or other local spelling of SIGINT). This
is pretty user-unfriendly, so improve it. To do so, we have to
modify the functions provided by pg_get_line.c; but we don't
want to mess with psql's SIGINT handler setup, so provide an
API that lets that handler cause the cancel to occur.

This relies on the assumption that we won't do any major harm by
longjmp'ing out of fgets(). While that's obviously a little shaky,
we've long had the same assumption in the main input loop, and few
issues have been reported.

psql has some other simple_prompt() calls that could usefully
be improved the same way; for now, just deal with \password.

Nathan Bossart, minor tweaks by me

Discussion: https://postgr.es/m/747443.1635536754@sss.pgh.pa.us

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/5f1148224bd78bcf3bf7d916b8fe85dd820c52c6

Modified Files
--------------
src/backend/libpq/hba.c | 2 +-
src/bin/initdb/initdb.c | 2 +-
src/bin/psql/command.c | 28 ++++++++++++++++++------
src/bin/psql/nls.mk | 2 +-
src/common/pg_get_line.c | 52 +++++++++++++++++++++++++++++++++++++++------
src/common/sprompt.c | 18 +++++++++++++++-
src/include/common/string.h | 15 +++++++++++--
7 files changed, 100 insertions(+), 19 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Michael Paquier 2021-11-18 01:38:30 pgsql: Add table to regression tests for binary-compatibility checks in
Previous Message Tom Lane 2021-11-17 21:54:22 pgsql: Add a planner support function for starts_with().