Skip to content
Snippets Groups Projects
Commit 5fe8c7d6 authored by Bruce Momjian's avatar Bruce Momjian
Browse files

More restructuring to use Win32 START with paths needing quotes.

parent 6cc4175b
No related branches found
No related tags found
No related merge requests found
......@@ -4,7 +4,7 @@
*
* 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)
* to pass everything to a shell to process them.
*/
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)
/* Win32 needs START /B rather than "&" */
......@@ -229,7 +264,7 @@ start_postmaster(void)
#else
snprintf(cmd, MAXPGPATH, "%sSTART /B \"%s\" %s < \"%s\" >> \"%s\" 2>&1%s",
#endif
SYSTEMQUOTE, postgres_path, post_opts, DEVNULL, log_file,
SYSTEMQUOTE, pgexec, post_opts, DEVNULL, log_file,
SYSTEMQUOTE);
else
#ifndef WIN32
......@@ -237,8 +272,20 @@ start_postmaster(void)
#else
snprintf(cmd, MAXPGPATH, "%sSTART /B \"%s\" %s < \"%s\" 2>&1%s",
#endif
SYSTEMQUOTE, postgres_path, post_opts, DEVNULL, SYSTEMQUOTE);
return system(cmd);
SYSTEMQUOTE, pgexec, post_opts, DEVNULL, SYSTEMQUOTE);
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;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment