]> granicus.if.org Git - postgresql/commitdiff
Fix assign_pgstat_temp_directory() to ensure the directory path is
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 3 May 2009 20:09:54 +0000 (20:09 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 3 May 2009 20:09:54 +0000 (20:09 +0000)
canonicalized.  Avoid the need to elog(FATAL) on out-of-memory.

src/backend/utils/misc/guc.c

index 23fb43647d10c190ad7ebf22efd0aa6579bc84f7..41368bf1e9974839645753b31c46ae0a6740d984 100644 (file)
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut <peter_e@gmx.net>.
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.503 2009/04/23 00:23:45 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.504 2009/05/03 20:09:54 tgl Exp $
  *
  *--------------------------------------------------------------------
  */
@@ -7618,19 +7618,28 @@ assign_pgstat_temp_directory(const char *newval, bool doit, GucSource source)
 {
        if (doit)
        {
+               char       *canon_val = guc_strdup(ERROR, newval);
+               char       *tname;
+               char       *fname;
+
+               canonicalize_path(canon_val);
+
+               tname = guc_malloc(ERROR, strlen(canon_val) + 12);      /* /pgstat.tmp */
+               sprintf(tname, "%s/pgstat.tmp", canon_val);
+               fname = guc_malloc(ERROR, strlen(canon_val) + 13);      /* /pgstat.stat */
+               sprintf(fname, "%s/pgstat.stat", canon_val);
+
                if (pgstat_stat_tmpname)
                        free(pgstat_stat_tmpname);
+               pgstat_stat_tmpname = tname;
                if (pgstat_stat_filename)
                        free(pgstat_stat_filename);
+               pgstat_stat_filename = fname;
 
-               pgstat_stat_tmpname = guc_malloc(FATAL, strlen(newval) + 12);  /* /pgstat.tmp */
-               pgstat_stat_filename = guc_malloc(FATAL, strlen(newval) + 13); /* /pgstat.stat */
-
-               sprintf(pgstat_stat_tmpname, "%s/pgstat.tmp", newval);
-               sprintf(pgstat_stat_filename, "%s/pgstat.stat", newval);
+               return canon_val;
        }
-
-       return newval;
+       else
+               return newval;
 }
 
 #include "guc-file.c"