Add copydir() function because xcopy doesn't work in XP without a
window.
This commit is contained in:
parent
bee0ac67ee
commit
09aad5a3a6
5
configure
vendored
5
configure
vendored
@ -11395,8 +11395,9 @@ LIBOBJS="$LIBOBJS qsort.$ac_objext" ;;
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
# Win32 can't to rename or unlink on an open file
|
# Win32 can't to rename or unlink on an open file
|
||||||
case $host_os in win32*|mingw*)
|
case $host_os in mingw*)
|
||||||
LIBOBJS="$LIBOBJS dirmod.$ac_objext" ;;
|
LIBOBJS="$LIBOBJS dirmod.$ac_objext"
|
||||||
|
LIBOBJS="$LIBOBJS copydir.$ac_objext" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if test "$with_readline" = yes; then
|
if test "$with_readline" = yes; then
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
dnl $Header: /cvsroot/pgsql/configure.in,v 1.250 2003/05/15 16:35:27 momjian Exp $
|
dnl $Header: /cvsroot/pgsql/configure.in,v 1.251 2003/05/15 17:59:17 momjian Exp $
|
||||||
dnl
|
dnl
|
||||||
dnl Developers, please strive to achieve this order:
|
dnl Developers, please strive to achieve this order:
|
||||||
dnl
|
dnl
|
||||||
@ -863,8 +863,9 @@ AC_LIBOBJ(qsort) ;;
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
# Win32 can't to rename or unlink on an open file
|
# Win32 can't to rename or unlink on an open file
|
||||||
case $host_os in win32*|mingw*)
|
case $host_os in mingw*)
|
||||||
AC_LIBOBJ(dirmod) ;;
|
AC_LIBOBJ(dirmod)
|
||||||
|
AC_LIBOBJ(copydir) ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if test "$with_readline" = yes; then
|
if test "$with_readline" = yes; then
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.114 2003/05/07 03:47:08 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.115 2003/05/15 17:59:17 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -311,11 +311,10 @@ createdb(const CreatedbStmt *stmt)
|
|||||||
/* Copy the template database to the new location */
|
/* Copy the template database to the new location */
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
snprintf(buf, sizeof(buf), "cp -r '%s' '%s'", src_loc, target_dir);
|
snprintf(buf, sizeof(buf), "cp -r '%s' '%s'", src_loc, target_dir);
|
||||||
#else
|
|
||||||
snprintf(buf, sizeof(buf), "xcopy /e /i /q '%s' '%s'", src_loc, target_dir);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (system(buf) != 0)
|
if (system(buf) != 0)
|
||||||
|
#else
|
||||||
|
if (copydir(src_loc, target_dir) != 0)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
if (remove_dbdirs(nominal_loc, alt_loc))
|
if (remove_dbdirs(nominal_loc, alt_loc))
|
||||||
elog(ERROR, "CREATE DATABASE: could not initialize database directory");
|
elog(ERROR, "CREATE DATABASE: could not initialize database directory");
|
||||||
|
44
src/port/copydir.c
Normal file
44
src/port/copydir.c
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* While "xcopy /e /i /q" works fine for copying directories, on Windows XP
|
||||||
|
* it requires an Window handle which prevents it from working when invoked
|
||||||
|
* as a service.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "postgres.h"
|
||||||
|
|
||||||
|
int
|
||||||
|
copydir(char *fromdir,char *todir)
|
||||||
|
{
|
||||||
|
DIR *xldir;
|
||||||
|
struct dirent *xlde;
|
||||||
|
char fromfl[MAXPGPATH];
|
||||||
|
char tofl[MAXPGPATH];
|
||||||
|
|
||||||
|
if (mkdir(todir) != 0)
|
||||||
|
{
|
||||||
|
elog(ERROR, "could not make directory '%s'",todir);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
xldir = opendir(fromdir);
|
||||||
|
if (xldir == NULL)
|
||||||
|
{
|
||||||
|
closedir(xldir);
|
||||||
|
elog(ERROR, "could not open directory '%s'",fromdir);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((xlde = readdir(xldir)) != NULL)
|
||||||
|
{
|
||||||
|
snprintf(fromfl, MAXPGPATH, "%s/%s", fromdir, xlde->d_name);
|
||||||
|
snprintf(tofl, MAXPGPATH, "%s/%s", todir, xlde->d_name);
|
||||||
|
if (CopyFile(fromfl,tofl,TRUE) < 0)
|
||||||
|
{
|
||||||
|
closedir(xldir);
|
||||||
|
elog(ERROR,"could not create file %s\n",todir);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
closedir(xldir);
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user