]> granicus.if.org Git - postgresql/commitdiff
Only free memory if environment value is replaced.
authorBruce Momjian <bruce@momjian.us>
Fri, 23 May 1997 01:53:42 +0000 (01:53 +0000)
committerBruce Momjian <bruce@momjian.us>
Fri, 23 May 1997 01:53:42 +0000 (01:53 +0000)
src/bin/psql/psql.c

index 486e07f331e40c9b85b79ca49dae21a2d1d57291..7fa71a3b98ae7dd17b5eeefd53f1ce0a8a523648 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.63 1997/05/23 00:20:20 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.64 1997/05/23 01:53:42 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -837,6 +837,7 @@ do_connect(const char *new_dbname,
     else {
        PGconn          *olddb = settings->db;
        static char     *userenv = NULL;
+       char            *old_userenv = NULL;
 
        printf("closing connection to database: %s\n", dbname);
        if (new_user != NULL) {
@@ -845,10 +846,14 @@ do_connect(const char *new_dbname,
                   so we have to do it via PGUSER
                */
            if (userenv != NULL)
-               free(userenv);
+               old_userenv = userenv;
            userenv = malloc(strlen("PGUSER=") + strlen(new_user) + 1);
            sprintf(userenv,"PGUSER=%s",new_user);
-           putenv(userenv); /*Solaris putenv() continues to use memory in env*/
+           /* putenv() may continue to use memory as part of environment */
+           putenv(userenv);
+           /* can delete old memory if we malloc'ed it */
+           if (old_userenv != NULL)
+               free(old_userenv);
        }
        settings->db = PQsetdb(PQhost(olddb), PQport(olddb),
                               NULL, NULL, new_dbname);