aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/psql/prompt.c70
1 files changed, 13 insertions, 57 deletions
diff --git a/src/bin/psql/prompt.c b/src/bin/psql/prompt.c
index 08db1902676..974e97022d6 100644
--- a/src/bin/psql/prompt.c
+++ b/src/bin/psql/prompt.c
@@ -3,7 +3,7 @@
*
* 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 "prompt.h"
@@ -32,9 +32,9 @@
* (might not be completely multibyte safe)
*
* Defined interpolations are:
- * %M - database server "hostname.domainname" (or "localhost" if this
- * information is not available)
- * %m - like %M, but hostname only (before first dot)
+ * %M - database server "hostname.domainname", "[local]" for AF_UNIX
+ * sockets, "[local:/dir/name]" if not default
+ * %m - like %M, but hostname only (before first dot), or always "[local]"
* %> - database server port number
* %n - database user name
* %/ - current database
@@ -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 *
get_prompt(promptStatus_t status)
{
@@ -166,23 +120,25 @@ get_prompt(promptStatus_t status)
case 'm':
if (pset.db)
{
+ const char * host = PQhost(pset.db);
+
/* 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')
buf[strcspn(buf, ".")] = '\0';
}
/* UNIX socket */
-#ifdef HAVE_UNIX_SOCKETS
else
{
- if (*p == 'm')
- localhost(HOSTNAME, buf, MAX_PROMPT_SIZE);
+ if (!host
+ || strcmp(host, DEFAULT_PGSOCKET_DIR)==0
+ || *p == 'm')
+ strncpy(buf, "[local]", MAX_PROMPT_SIZE);
else
- localhost(DOMAINNAME, buf, MAX_PROMPT_SIZE);
+ snprintf(buf, MAX_PROMPT_SIZE, "[local:%s]", host);
}
-#endif /* HAVE_UNIX_SOCKETS */
}
break;
/* DB server port number */