mirror of
https://github.com/postgres/postgres.git
synced 2025-07-24 14:22:24 +03:00
Make prompt customization work with changeable Unix socket location.
This commit is contained in:
@ -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 */
|
||||
|
Reference in New Issue
Block a user