]> granicus.if.org Git - postgresql/commitdiff
Make prompt customization work with changeable Unix socket location.
authorPeter Eisentraut <peter_e@gmx.net>
Sun, 6 May 2001 17:21:11 +0000 (17:21 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Sun, 6 May 2001 17:21:11 +0000 (17:21 +0000)
doc/src/sgml/ref/psql-ref.sgml
src/bin/psql/prompt.c

index 85efbf56425b429dfbd32719b8cf62bdb09c1b36..9fbafcc88148c9fe984007205b7effd887c61aba 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$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
 -->
 
@@ -1970,14 +1970,27 @@ testdb=> <userinput>\set content `sed -e "s/'/\\\\\\'/g" < my_file.txt`</userinp
     <variablelist>
       <varlistentry>
         <term><literal>%M</literal></term>
-       <listitem><para>The full hostname (with domain name) of the database server (or
-         <quote>localhost</quote> if hostname information is not available).</para></listitem>
+       <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>
         <term><literal>%m</literal></term>
-       <listitem><para>The hostname of the database server, truncated after the
-         first dot.</para></listitem>
+       <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>
index 08db1902676cff656ae05d34eb594752862180b1..974e97022d634f9accefdf23856466caf6102c52 100644 (file)
@@ -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
  *--------------------------
  */
 
-/*
- * 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 */