Fixups for Win32 symlinks.

This commit is contained in:
Bruce Momjian 2004-08-08 01:31:15 +00:00
parent 9b3caebb0a
commit 5e01aa7ad1
4 changed files with 28 additions and 7 deletions

8
configure vendored
View File

@ -12060,7 +12060,13 @@ LIBOBJS="$LIBOBJS copydir.$ac_objext"
LIBOBJS="$LIBOBJS gettimeofday.$ac_objext" LIBOBJS="$LIBOBJS gettimeofday.$ac_objext"
LIBOBJS="$LIBOBJS kill.$ac_objext" LIBOBJS="$LIBOBJS kill.$ac_objext"
LIBOBJS="$LIBOBJS open.$ac_objext" LIBOBJS="$LIBOBJS open.$ac_objext"
LIBOBJS="$LIBOBJS rand.$ac_objext" ;; LIBOBJS="$LIBOBJS rand.$ac_objext"
cat >>confdefs.h <<\_ACEOF
#define HAVE_SYMLINK 1
_ACEOF
;;
esac esac
if test "$with_readline" = yes; then if test "$with_readline" = yes; then

View File

@ -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 $PostgreSQL: pgsql/configure.in,v 1.371 2004/08/04 21:33:35 tgl Exp $ dnl $PostgreSQL: pgsql/configure.in,v 1.372 2004/08/08 01:31:09 momjian Exp $
dnl dnl
dnl Developers, please strive to achieve this order: dnl Developers, please strive to achieve this order:
dnl dnl
@ -908,7 +908,10 @@ AC_LIBOBJ(copydir)
AC_LIBOBJ(gettimeofday) AC_LIBOBJ(gettimeofday)
AC_LIBOBJ(kill) AC_LIBOBJ(kill)
AC_LIBOBJ(open) AC_LIBOBJ(open)
AC_LIBOBJ(rand) ;; AC_LIBOBJ(rand)
AC_DEFINE([HAVE_SYMLINK], 1,
[Define to 1 if you have the `symlink' function.])
;;
esac esac
if test "$with_readline" = yes; then if test "$with_readline" = yes; then

View File

@ -45,7 +45,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/tablespace.c,v 1.7 2004/08/01 20:30:48 tgl Exp $ * $PostgreSQL: pgsql/src/backend/commands/tablespace.c,v 1.8 2004/08/08 01:31:11 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -482,11 +482,20 @@ DropTableSpace(DropTableSpaceStmt *stmt)
errmsg("could not unlink file \"%s\": %m", errmsg("could not unlink file \"%s\": %m",
subfile))); subfile)));
#ifndef WIN32
if (unlink(location) < 0) if (unlink(location) < 0)
ereport(ERROR, ereport(ERROR,
(errcode_for_file_access(), (errcode_for_file_access(),
errmsg("could not unlink symbolic link \"%s\": %m", errmsg("could not unlink symbolic link \"%s\": %m",
location))); location)));
#else
/* The junction is a directory, not a file */
if (rmdir(location) < 0)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not remove junction dir \"%s\": %m",
location)));
#endif
pfree(subfile); pfree(subfile);
pfree(location); pfree(location);

View File

@ -10,7 +10,7 @@
* Win32 (NT, Win2k, XP). replace() doesn't work on Win95/98/Me. * Win32 (NT, Win2k, XP). replace() doesn't work on Win95/98/Me.
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/port/dirmod.c,v 1.14 2004/08/07 21:48:09 momjian Exp $ * $PostgreSQL: pgsql/src/port/dirmod.c,v 1.15 2004/08/08 01:31:15 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -153,9 +153,9 @@ pgsymlink(const char *oldpath, const char *newpath)
{ {
HANDLE dirhandle; HANDLE dirhandle;
DWORD len; DWORD len;
char *p = nativeTarget;
char buffer[MAX_PATH*sizeof(WCHAR) + sizeof(REPARSE_JUNCTION_DATA_BUFFER)]; char buffer[MAX_PATH*sizeof(WCHAR) + sizeof(REPARSE_JUNCTION_DATA_BUFFER)];
char nativeTarget[MAX_PATH]; char nativeTarget[MAX_PATH];
char *p = nativeTarget;
REPARSE_JUNCTION_DATA_BUFFER *reparseBuf = (REPARSE_JUNCTION_DATA_BUFFER*)buffer; REPARSE_JUNCTION_DATA_BUFFER *reparseBuf = (REPARSE_JUNCTION_DATA_BUFFER*)buffer;
CreateDirectory(newpath, 0); CreateDirectory(newpath, 0);
@ -203,9 +203,12 @@ pgsymlink(const char *oldpath, const char *newpath)
NULL, GetLastError(), NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPSTR)&msg, 0, NULL ); (LPSTR)&msg, 0, NULL );
#ifdef FRONTEND
fprintf(stderr, "Error setting junction for %s: %s", nativeTarget, msg);
#else
ereport(ERROR, (errcode_for_file_access(), ereport(ERROR, (errcode_for_file_access(),
errmsg("Error setting junction for %s: %s", nativeTarget, msg))); errmsg("Error setting junction for %s: %s", nativeTarget, msg)));
#endif
LocalFree(msg); LocalFree(msg);
CloseHandle(dirhandle); CloseHandle(dirhandle);