Commit 84e8e5b4 authored by Peter Eisentraut's avatar Peter Eisentraut

Make prompt customization work with changeable Unix socket location.

parent 36161b30
<!-- <!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.47 2001/03/24 23:03:26 petere Exp $ $Header: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.48 2001/05/06 17:21:11 petere Exp $
Postgres documentation Postgres documentation
--> -->
...@@ -1970,14 +1970,27 @@ testdb=> <userinput>\set content `sed -e "s/'/\\\\\\'/g" < my_file.txt`</userinp ...@@ -1970,14 +1970,27 @@ testdb=> <userinput>\set content `sed -e "s/'/\\\\\\'/g" < my_file.txt`</userinp
<variablelist> <variablelist>
<varlistentry> <varlistentry>
<term><literal>%M</literal></term> <term><literal>%M</literal></term>
<listitem><para>The full hostname (with domain name) of the database server (or <listitem>
<quote>localhost</quote> if hostname information is not available).</para></listitem> <para>
The full hostname (with domain name) of the database server,
or <literal>[local]</literal> if the connection is over a
Unix domain socket, or
<literal>[local:<replaceable>/dir/name</replaceable>]</literal>,
if the Unix domain socket is not at the compiled in default
location.
</para>
</listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term><literal>%m</literal></term> <term><literal>%m</literal></term>
<listitem><para>The hostname of the database server, truncated after the <listitem>
first dot.</para></listitem> <para>
The hostname of the database server, truncated after the
first dot, or <literal>[local]</literal> if the connection
is over a Unix domain socket.
</para>
</listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* Copyright 2000 by PostgreSQL Global Development Group * Copyright 2000 by PostgreSQL Global Development Group
* *
* $Header: /cvsroot/pgsql/src/bin/psql/prompt.c,v 1.18 2001/03/22 04:00:22 momjian Exp $ * $Header: /cvsroot/pgsql/src/bin/psql/prompt.c,v 1.19 2001/05/06 17:21:11 petere Exp $
*/ */
#include "postgres_fe.h" #include "postgres_fe.h"
#include "prompt.h" #include "prompt.h"
...@@ -32,9 +32,9 @@ ...@@ -32,9 +32,9 @@
* (might not be completely multibyte safe) * (might not be completely multibyte safe)
* *
* Defined interpolations are: * Defined interpolations are:
* %M - database server "hostname.domainname" (or "localhost" if this * %M - database server "hostname.domainname", "[local]" for AF_UNIX
* information is not available) * sockets, "[local:/dir/name]" if not default
* %m - like %M, but hostname only (before first dot) * %m - like %M, but hostname only (before first dot), or always "[local]"
* %> - database server port number * %> - database server port number
* %n - database user name * %n - database user name
* %/ - current database * %/ - current database
...@@ -61,52 +61,6 @@ ...@@ -61,52 +61,6 @@
*-------------------------- *--------------------------
*/ */
/*
* We need hostname information, only if connection is via UNIX socket
*/
#ifdef HAVE_UNIX_SOCKETS
#define DOMAINNAME 1
#define HOSTNAME 2
/*
* Return full hostname for localhost.
* - informations are init only in firts time - not queries DNS or NIS
* for every localhost() call
*/
static char *
localhost(int type, char *buf, int siz)
{
static struct hostent *hp = NULL;
static int err = 0;
if (hp == NULL && err == 0)
{
char hname[256];
if (gethostname(hname, 256) == 0)
{
if (!(hp = gethostbyname(hname)))
err = 1;
}
else
err = 1;
}
if (hp == NULL)
return strncpy(buf, "localhost", siz);
strncpy(buf, hp->h_name, siz); /* full aaa.bbb.ccc */
if (type == HOSTNAME)
buf[strcspn(buf, ".")] = '\0';
return buf;
}
#endif /* HAVE_UNIX_SOCKETS */
char * char *
get_prompt(promptStatus_t status) get_prompt(promptStatus_t status)
{ {
...@@ -166,23 +120,25 @@ get_prompt(promptStatus_t status) ...@@ -166,23 +120,25 @@ get_prompt(promptStatus_t status)
case 'm': case 'm':
if (pset.db) if (pset.db)
{ {
const char * host = PQhost(pset.db);
/* INET socket */ /* INET socket */
if (PQhost(pset.db)) if (host && host[0] && host[0] != '/')
{ {
strncpy(buf, PQhost(pset.db), MAX_PROMPT_SIZE); strncpy(buf, host, MAX_PROMPT_SIZE);
if (*p == 'm') if (*p == 'm')
buf[strcspn(buf, ".")] = '\0'; buf[strcspn(buf, ".")] = '\0';
} }
/* UNIX socket */ /* UNIX socket */
#ifdef HAVE_UNIX_SOCKETS
else else
{ {
if (*p == 'm') if (!host
localhost(HOSTNAME, buf, MAX_PROMPT_SIZE); || strcmp(host, DEFAULT_PGSOCKET_DIR)==0
|| *p == 'm')
strncpy(buf, "[local]", MAX_PROMPT_SIZE);
else else
localhost(DOMAINNAME, buf, MAX_PROMPT_SIZE); snprintf(buf, MAX_PROMPT_SIZE, "[local:%s]", host);
} }
#endif /* HAVE_UNIX_SOCKETS */
} }
break; break;
/* DB server port number */ /* DB server port number */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment