Commit 5fe8c7d6 authored by Bruce Momjian's avatar Bruce Momjian

More restructuring to use Win32 START with paths needing quotes.

parent 6cc4175b
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* *
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.13 2004/06/10 22:20:53 momjian Exp $ * $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.14 2004/06/11 00:57:25 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -221,6 +221,41 @@ start_postmaster(void) ...@@ -221,6 +221,41 @@ start_postmaster(void)
* to pass everything to a shell to process them. * to pass everything to a shell to process them.
*/ */
char cmd[MAXPGPATH]; char cmd[MAXPGPATH];
int ret;
char *pgexec = postgres_path;
#ifdef WIN32
/*
* Win32 has a problem with the interaction between START and system().
* There is no way to quote the executable name passed to START.
* Therefore, we put the executable name in a temporary batch file
* and run it via START.
*/
char tmp[MAXPGPATH] = "C:\\PG_CTL_XXXXXX", /* good location? */
bat[MAXPGPATH];
int fd = mkstemp(tmp);
if (fd == -1)
{
fprintf(stderr, _("%s: cannot create batch file %s to start server: %s\n"),
progname, tmp, strerror(errno));
exit(1);
}
write(fd, postgres_path, strlen(postgres_path));
write(fd, "\n", 1);
close(fd);
strcpy(bat, tmp);
strcat(bat, ".BAT");
pgexec = bat;
if (rename(tmp, bat) == -1)
{
fprintf(stderr, _("%s: cannot rename batch file %s to %s: %s\n"),
progname, tmp, bat, strerror(errno));
unlink(tmp);
exit(1);
}
#endif
if (log_file != NULL) if (log_file != NULL)
/* Win32 needs START /B rather than "&" */ /* Win32 needs START /B rather than "&" */
...@@ -229,7 +264,7 @@ start_postmaster(void) ...@@ -229,7 +264,7 @@ start_postmaster(void)
#else #else
snprintf(cmd, MAXPGPATH, "%sSTART /B \"%s\" %s < \"%s\" >> \"%s\" 2>&1%s", snprintf(cmd, MAXPGPATH, "%sSTART /B \"%s\" %s < \"%s\" >> \"%s\" 2>&1%s",
#endif #endif
SYSTEMQUOTE, postgres_path, post_opts, DEVNULL, log_file, SYSTEMQUOTE, pgexec, post_opts, DEVNULL, log_file,
SYSTEMQUOTE); SYSTEMQUOTE);
else else
#ifndef WIN32 #ifndef WIN32
...@@ -237,8 +272,20 @@ start_postmaster(void) ...@@ -237,8 +272,20 @@ start_postmaster(void)
#else #else
snprintf(cmd, MAXPGPATH, "%sSTART /B \"%s\" %s < \"%s\" 2>&1%s", snprintf(cmd, MAXPGPATH, "%sSTART /B \"%s\" %s < \"%s\" 2>&1%s",
#endif #endif
SYSTEMQUOTE, postgres_path, post_opts, DEVNULL, SYSTEMQUOTE); SYSTEMQUOTE, pgexec, post_opts, DEVNULL, SYSTEMQUOTE);
return system(cmd);
ret = system(cmd);
#ifdef WIN32
/* We are unlinking it while it is running, but that should be OK */
if (unlink(bat))
{
fprintf(stderr, _("%s: cannot remove batch file %s: %s\n"),
progname, bat, strerror(errno));
exit(1);
}
#endif
return ret;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment