aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2022-08-05 09:22:56 +1200
committerThomas Munro <tmunro@postgresql.org>2022-08-05 09:22:56 +1200
commit2b1f580ee2ca373d0451d89a40fc8f0a5f55ede9 (patch)
treef752391d9be7ab5a8229c1f3c4e0e5f413e5d5ec /src
parentadeef67834cc3db14c36430c1421cf4ed8a809d3 (diff)
downloadpostgresql-2b1f580ee2ca373d0451d89a40fc8f0a5f55ede9.tar.gz
postgresql-2b1f580ee2ca373d0451d89a40fc8f0a5f55ede9.zip
Remove configure probes for symlink/readlink, and dead code.
symlink() and readlink() are in SUSv2 and all targeted Unix systems have them. We have partial emulation on Windows. Code that raised runtime errors on systems without it has been dead for years, so we can remove that and also references to such systems in the documentation. Define HAVE_READLINK and HAVE_SYMLINK macros on Unix. Our Windows replacement functions based on junction points can't be used for relative paths or for non-directories, so the macros can be used to check for full symlink support. The places that deal with tablespaces can just use symlink functions without checking the macros. (If they did check the macros, they'd need to provide an #else branch with a runtime or compile time error, and it'd be dead code.) Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Reviewed-by: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/CA+hUKGJ3LHeP9w5Fgzdr4G8AnEtJ=z=p6hGDEm4qYGEUX5B6fQ@mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/transam/xlog.c12
-rw-r--r--src/backend/commands/tablespace.c13
-rw-r--r--src/backend/replication/basebackup.c13
-rw-r--r--src/backend/utils/adt/misc.c8
-rw-r--r--src/bin/initdb/initdb.c4
-rw-r--r--src/bin/pg_basebackup/pg_basebackup.c4
-rw-r--r--src/bin/pg_rewind/file_ops.c5
-rw-r--r--src/common/exec.c4
-rw-r--r--src/include/pg_config.h.in6
-rw-r--r--src/include/port.h8
-rw-r--r--src/tools/msvc/Solution.pm2
11 files changed, 12 insertions, 67 deletions
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 15ab8d90d4b..26fbed00a4d 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -8305,7 +8305,6 @@ do_pg_backup_start(const char *backupidstr, bool fast, TimeLineID *starttli_p,
if (get_dirent_type(fullpath, de, false, ERROR) != PGFILETYPE_LNK)
continue;
-#if defined(HAVE_READLINK) || defined(WIN32)
rllen = readlink(fullpath, linkpath, sizeof(linkpath));
if (rllen < 0)
{
@@ -8358,17 +8357,6 @@ do_pg_backup_start(const char *backupidstr, bool fast, TimeLineID *starttli_p,
ti->oid, escapedpath.data);
pfree(escapedpath.data);
-#else
-
- /*
- * If the platform does not have symbolic links, it should not be
- * possible to have tablespaces - clearly somebody else created
- * them. Warn about it and ignore.
- */
- ereport(WARNING,
- (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("tablespaces are not supported on this platform")));
-#endif
}
FreeDir(tblspcdir);
diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c
index 570ce3dbd54..526e82e388b 100644
--- a/src/backend/commands/tablespace.c
+++ b/src/backend/commands/tablespace.c
@@ -213,7 +213,6 @@ TablespaceCreateDbspace(Oid spcOid, Oid dbOid, bool isRedo)
Oid
CreateTableSpace(CreateTableSpaceStmt *stmt)
{
-#ifdef HAVE_SYMLINK
Relation rel;
Datum values[Natts_pg_tablespace];
bool nulls[Natts_pg_tablespace] = {0};
@@ -391,12 +390,6 @@ CreateTableSpace(CreateTableSpaceStmt *stmt)
table_close(rel, NoLock);
return tablespaceoid;
-#else /* !HAVE_SYMLINK */
- ereport(ERROR,
- (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("tablespaces are not supported on this platform")));
- return InvalidOid; /* keep compiler quiet */
-#endif /* HAVE_SYMLINK */
}
/*
@@ -407,7 +400,6 @@ CreateTableSpace(CreateTableSpaceStmt *stmt)
void
DropTableSpace(DropTableSpaceStmt *stmt)
{
-#ifdef HAVE_SYMLINK
char *tablespacename = stmt->tablespacename;
TableScanDesc scandesc;
Relation rel;
@@ -573,11 +565,6 @@ DropTableSpace(DropTableSpaceStmt *stmt)
/* We keep the lock on pg_tablespace until commit */
table_close(rel, NoLock);
-#else /* !HAVE_SYMLINK */
- ereport(ERROR,
- (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("tablespaces are not supported on this platform")));
-#endif /* HAVE_SYMLINK */
}
diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c
index 7f85071229b..09f071300d4 100644
--- a/src/backend/replication/basebackup.c
+++ b/src/backend/replication/basebackup.c
@@ -1330,7 +1330,6 @@ sendDir(bbsink *sink, const char *path, int basepathlen, bool sizeonly,
#endif
)
{
-#if defined(HAVE_READLINK) || defined(WIN32)
char linkpath[MAXPGPATH];
int rllen;
@@ -1349,18 +1348,6 @@ sendDir(bbsink *sink, const char *path, int basepathlen, bool sizeonly,
size += _tarWriteHeader(sink, pathbuf + basepathlen + 1, linkpath,
&statbuf, sizeonly);
-#else
-
- /*
- * If the platform does not have symbolic links, it should not be
- * possible to have tablespaces - clearly somebody else created
- * them. Warn about it and ignore.
- */
- ereport(WARNING,
- (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("tablespaces are not supported on this platform")));
- continue;
-#endif /* HAVE_READLINK */
}
else if (S_ISDIR(statbuf.st_mode))
{
diff --git a/src/backend/utils/adt/misc.c b/src/backend/utils/adt/misc.c
index 89690be2ed1..af0d924459e 100644
--- a/src/backend/utils/adt/misc.c
+++ b/src/backend/utils/adt/misc.c
@@ -302,8 +302,6 @@ pg_tablespace_location(PG_FUNCTION_ARGS)
tablespaceOid == GLOBALTABLESPACE_OID)
PG_RETURN_TEXT_P(cstring_to_text(""));
-#if defined(HAVE_READLINK) || defined(WIN32)
-
/*
* Find the location of the tablespace by reading the symbolic link that
* is in pg_tblspc/<oid>.
@@ -349,12 +347,6 @@ pg_tablespace_location(PG_FUNCTION_ARGS)
targetpath[rllen] = '\0';
PG_RETURN_TEXT_P(cstring_to_text(targetpath));
-#else
- ereport(ERROR,
- (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("tablespaces are not supported on this platform")));
- PG_RETURN_NULL();
-#endif
}
/*
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index 89b888eaa5a..2c93ffe8114 100644
--- a/src/bin/initdb/initdb.c
+++ b/src/bin/initdb/initdb.c
@@ -2646,13 +2646,9 @@ create_xlog_or_symlink(void)
pg_fatal("could not access directory \"%s\": %m", xlog_dir);
}
-#ifdef HAVE_SYMLINK
if (symlink(xlog_dir, subdirloc) != 0)
pg_fatal("could not create symbolic link \"%s\": %m",
subdirloc);
-#else
- pg_fatal("symlinks are not supported on this platform");
-#endif
}
else
{
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index 1a877ba54e4..8694b05e68c 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -2763,12 +2763,8 @@ main(int argc, char **argv)
PQserverVersion(conn) < MINIMUM_VERSION_FOR_PG_WAL ?
"pg_xlog" : "pg_wal");
-#ifdef HAVE_SYMLINK
if (symlink(xlog_dir, linkloc) != 0)
pg_fatal("could not create symbolic link \"%s\": %m", linkloc);
-#else
- pg_fatal("symlinks are not supported on this platform");
-#endif
free(linkloc);
}
diff --git a/src/bin/pg_rewind/file_ops.c b/src/bin/pg_rewind/file_ops.c
index 6cb288f0992..5e6d8b89c49 100644
--- a/src/bin/pg_rewind/file_ops.c
+++ b/src/bin/pg_rewind/file_ops.c
@@ -437,7 +437,6 @@ recurse_dir(const char *datadir, const char *parentpath,
else if (pgwin32_is_junction(fullpath))
#endif
{
-#if defined(HAVE_READLINK) || defined(WIN32)
char link_target[MAXPGPATH];
int len;
@@ -460,10 +459,6 @@ recurse_dir(const char *datadir, const char *parentpath,
if ((parentpath && strcmp(parentpath, "pg_tblspc") == 0) ||
strcmp(path, "pg_wal") == 0)
recurse_dir(datadir, path, callback);
-#else
- pg_fatal("\"%s\" is a symbolic link, but symbolic links are not supported on this platform",
- fullpath);
-#endif /* HAVE_READLINK */
}
}
diff --git a/src/common/exec.c b/src/common/exec.c
index f7d44b09569..fdcad0ee8cf 100644
--- a/src/common/exec.c
+++ b/src/common/exec.c
@@ -250,6 +250,10 @@ find_my_exec(const char *argv0, char *retpath)
* Note: we are not particularly tense about producing nice error messages
* because we are not really expecting error here; we just determined that
* the symlink does point to a valid executable.
+ *
+ * Here we test HAVE_READLINK, which excludes Windows. There's no point in
+ * using our junction point-based replacement code for this, because that only
+ * works for directories.
*/
static int
resolve_symlinks(char *path)
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index 120eacfb200..15e01efa068 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -427,9 +427,6 @@
/* Define to 1 if you have the <readline/readline.h> header file. */
#undef HAVE_READLINE_READLINE_H
-/* Define to 1 if you have the `readlink' function. */
-#undef HAVE_READLINK
-
/* Define to 1 if you have the `readv' function. */
#undef HAVE_READV
@@ -556,9 +553,6 @@
/* Define to 1 if `tm_zone' is a member of `struct tm'. */
#undef HAVE_STRUCT_TM_TM_ZONE
-/* Define to 1 if you have the `symlink' function. */
-#undef HAVE_SYMLINK
-
/* Define to 1 if you have the `syncfs' function. */
#undef HAVE_SYNCFS
diff --git a/src/include/port.h b/src/include/port.h
index 7a1a02f6598..7dad6caa639 100644
--- a/src/include/port.h
+++ b/src/include/port.h
@@ -522,11 +522,19 @@ extern bool wait_result_is_any_signal(int exit_status, bool include_command_not_
/*
* Interfaces that we assume all Unix system have. We retain individual macros
* for better documentation.
+ *
+ * For symlink-related functions, there is often no need to test these macros,
+ * because we provided basic support on Windows that can work with absolute
+ * paths to directories. Code that wants to test for complete symlink support
+ * (including relative paths and non-directories) should be conditional on
+ * HAVE_READLINK or HAVE_SYMLINK.
*/
#ifndef WIN32
#define HAVE_GETRLIMIT 1
+#define HAVE_READLINK 1
#define HAVE_SETSID 1
#define HAVE_SHM_OPEN 1
+#define HAVE_SYMLINK 1
#endif
#endif /* PG_PORT_H */
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index a9680dc8630..71db5f60f8a 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -337,7 +337,6 @@ sub GenerateFiles
HAVE_READLINE_H => undef,
HAVE_READLINE_HISTORY_H => undef,
HAVE_READLINE_READLINE_H => undef,
- HAVE_READLINK => undef,
HAVE_READV => undef,
HAVE_RL_COMPLETION_MATCHES => undef,
HAVE_RL_COMPLETION_SUPPRESS_QUOTE => undef,
@@ -380,7 +379,6 @@ sub GenerateFiles
HAVE_STRUCT_SOCKADDR_UN => undef,
HAVE_STRUCT_TM_TM_ZONE => undef,
HAVE_SYNC_FILE_RANGE => undef,
- HAVE_SYMLINK => 1,
HAVE_SYNCFS => undef,
HAVE_SYSLOG => undef,
HAVE_SYS_EPOLL_H => undef,