From 18cbc7aefc8265a4f8347be8dfefeb40f7b19656 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sun, 12 Feb 2006 05:24:38 +0000 Subject: [PATCH] Use 0x01 for newlines in saved history. It was determined to be not used by multi-byte sequences, but futher invesetigation might prove this to be false. --- src/bin/psql/input.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/bin/psql/input.c b/src/bin/psql/input.c index 1b6e48cff3..6b1f78af0a 100644 --- a/src/bin/psql/input.c +++ b/src/bin/psql/input.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2005, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/input.c,v 1.47 2006/02/11 21:55:35 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/psql/input.c,v 1.48 2006/02/12 05:24:38 momjian Exp $ */ #include "postgres_fe.h" @@ -26,6 +26,15 @@ static bool useReadline; static bool useHistory; char *psql_history; +/* + * Preserve newlines in saved queries by mapping '\n' to NL_IN_HISTORY + * + * It is assumed NL_IN_HISTORY will never be entered by the user + * nor appear inside a multi-byte string. 0x00 is not properly + * handled by the readline routines so it can not be used + * for this purpose. + */ +#define NL_IN_HISTORY 0x01 enum histcontrol { @@ -213,7 +222,7 @@ static void encode_history() cur_hist; cur_hist = next_history()) for (cur_ptr = cur_hist->line; *cur_ptr; cur_ptr++) if (*cur_ptr == '\n') - *cur_ptr = '\0'; + *cur_ptr = NL_IN_HISTORY; } static void decode_history() @@ -224,7 +233,7 @@ static void decode_history() for (history_set_pos(0), cur_hist = current_history(); cur_hist; cur_hist = next_history()) for (cur_ptr = cur_hist->line; *cur_ptr; cur_ptr++) - if (*cur_ptr == '\0') + if (*cur_ptr == NL_IN_HISTORY) *cur_ptr = '\n'; }