From 5e01aa7ad122c1b011df7a14370d2c34d53ddeb4 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sun, 8 Aug 2004 01:31:15 +0000 Subject: [PATCH] Fixups for Win32 symlinks. --- configure | 8 +++++++- configure.in | 7 +++++-- src/backend/commands/tablespace.c | 11 ++++++++++- src/port/dirmod.c | 9 ++++++--- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/configure b/configure index 7506960564..a9356bcc86 100755 --- a/configure +++ b/configure @@ -12060,7 +12060,13 @@ LIBOBJS="$LIBOBJS copydir.$ac_objext" LIBOBJS="$LIBOBJS gettimeofday.$ac_objext" LIBOBJS="$LIBOBJS kill.$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 if test "$with_readline" = yes; then diff --git a/configure.in b/configure.in index 5a27f6cc75..cf12ce6493 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,5 @@ 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 Developers, please strive to achieve this order: dnl @@ -908,7 +908,10 @@ AC_LIBOBJ(copydir) AC_LIBOBJ(gettimeofday) AC_LIBOBJ(kill) AC_LIBOBJ(open) -AC_LIBOBJ(rand) ;; +AC_LIBOBJ(rand) +AC_DEFINE([HAVE_SYMLINK], 1, + [Define to 1 if you have the `symlink' function.]) +;; esac if test "$with_readline" = yes; then diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c index 1a9e69dc12..05a13315a1 100644 --- a/src/backend/commands/tablespace.c +++ b/src/backend/commands/tablespace.c @@ -45,7 +45,7 @@ * * * 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", subfile))); +#ifndef WIN32 if (unlink(location) < 0) ereport(ERROR, (errcode_for_file_access(), errmsg("could not unlink symbolic link \"%s\": %m", 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(location); diff --git a/src/port/dirmod.c b/src/port/dirmod.c index 3010127c4c..1ff57a2688 100644 --- a/src/port/dirmod.c +++ b/src/port/dirmod.c @@ -10,7 +10,7 @@ * Win32 (NT, Win2k, XP). replace() doesn't work on Win95/98/Me. * * 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; DWORD len; - char *p = nativeTarget; char buffer[MAX_PATH*sizeof(WCHAR) + sizeof(REPARSE_JUNCTION_DATA_BUFFER)]; char nativeTarget[MAX_PATH]; + char *p = nativeTarget; REPARSE_JUNCTION_DATA_BUFFER *reparseBuf = (REPARSE_JUNCTION_DATA_BUFFER*)buffer; CreateDirectory(newpath, 0); @@ -203,9 +203,12 @@ pgsymlink(const char *oldpath, const char *newpath) NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&msg, 0, NULL ); +#ifdef FRONTEND + fprintf(stderr, "Error setting junction for %s: %s", nativeTarget, msg); +#else ereport(ERROR, (errcode_for_file_access(), errmsg("Error setting junction for %s: %s", nativeTarget, msg))); - +#endif LocalFree(msg); CloseHandle(dirhandle);