v4-0001-More-consistent-behavior-of-GetDataDirectoryCreat.patch

application/octet-stream

Filename: v4-0001-More-consistent-behavior-of-GetDataDirectoryCreat.patch
Type: application/octet-stream
Part: 1
Message: Re: pg_resetwal tests, logging, and docs update

Patch

Format: format-patch
Series: patch v4-0001
Subject: More consistent behavior of GetDataDirectoryCreatePerm on Windows
File+
src/common/file_perm.c 5 9
From 51f5c777afdec1701ad25d6f8ecf06a5114a6836 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Tue, 31 Oct 2023 07:42:17 -0400
Subject: [PATCH v4 1/3] More consistent behavior of GetDataDirectoryCreatePerm
 on Windows

On Windows, GetDataDirectoryCreatePerm() just did nothing.  The way
the code in some callers is structured, this is the first function
that tries to address the data directory.  So it also ends up the
place that is responsible for reporting that a data directory does not
exist or similar.  Therefore, on Windows, these scenarios end up on a
potentially completely different code paths.

To unify this, to make testing more consistent across platforms, have
GetDataDirectoryCreatePerm() run the stat() call on Windows as well,
even though it won't do anything with the result.  That way, file
system errors are reporting to callers in the same way as on
non-Windows.
---
 src/common/file_perm.c | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/src/common/file_perm.c b/src/common/file_perm.c
index 60f88d2caf..81464f939c 100644
--- a/src/common/file_perm.c
+++ b/src/common/file_perm.c
@@ -59,12 +59,12 @@ SetDataDirectoryCreatePerm(int dataDirMode)
  * false is returned.
  *
  * Suppress when on Windows, because there may not be proper support for Unix-y
- * file permissions.
+ * file permissions.  But we still run stat() on the directory so that callers
+ * get consistent behavior for example if the directory does not exist.
  */
 bool
 GetDataDirectoryCreatePerm(const char *dataDir)
 {
-#if !defined(WIN32) && !defined(__CYGWIN__)
 	struct stat statBuf;
 
 	/*
@@ -75,16 +75,12 @@ GetDataDirectoryCreatePerm(const char *dataDir)
 	if (stat(dataDir, &statBuf) == -1)
 		return false;
 
+#if !defined(WIN32) && !defined(__CYGWIN__)
 	/* Set permissions */
 	SetDataDirectoryCreatePerm(statBuf.st_mode);
-	return true;
-#else							/* !defined(WIN32) && !defined(__CYGWIN__) */
-	/*
-	 * On Windows, we don't have anything to do here since they don't have
-	 * Unix-y permissions.
-	 */
-	return true;
 #endif
+
+	return true;
 }
 
 
-- 
2.42.0