On Thu, Dec 19, 2019 at 01:46:33PM +0900, Kyotaro Horiguchi wrote:
> I found some similar places by grep'ing for windows version names the
> whole source tree.
> 
> - The comment for trapsig is mentioning win98/Me/NT/2000/XP.

Let's refresh the comment here, as per the following:
https://docs.microsoft.com/en-us/previous-versions/xdkz3x12(v=vs.140)

> - We don't need the (only) caller site of IsWindows7OrGreater()?

The compiled code can still run with Windows Server 2008. 

> - The comment for AddUserToTokenDacl() is mentioning "XP/2K3,
>   Vista/2008".

Keeping some context is still good here IMO.

> - InitializeLDAPConnection dynamically loads WLDAP32.DLL for Windows
>   2000. It could either be statically loaded or could be left as it
>   is, but the comment seems to need a change in either case.

Looks safer to me to keep it.

> - The comment for IsoLocaleName mentioning Vista and Visual Studio
>   2012.

It is good to keep some history in this context.

> - install-windows.sgml is mentioning "XP and later" around line 117.

But this still applies to XP, even if compilation is supported from
Windows 7.

> - installation.sgml is mentioning NT/2000/XP as platforms that don't
>   support adduser/su, command.

No objections to simplify that a bit.

Attached is a simplified version.  It is smaller than the previous
one, but that's already a good cut.  I have also done some testing
with the service manager to check after pipe_read_line(), and that
works.

Thoughts?
--
Michael
diff --git a/src/common/exec.c b/src/common/exec.c
index 359442cf0c..9b20195ce1 100644
--- a/src/common/exec.c
+++ b/src/common/exec.c
@@ -364,7 +364,6 @@ find_other_exec(const char *argv0, const char *target,
 static char *
 pipe_read_line(char *cmd, char *line, int maxsize)
 {
-#ifndef WIN32
 	FILE	   *pgver;
 
 	/* flush output buffers in case popen does not... */
@@ -393,130 +392,6 @@ pipe_read_line(char *cmd, char *line, int maxsize)
 		return NULL;
 
 	return line;
-#else							/* WIN32 */
-
-	SECURITY_ATTRIBUTES sattr;
-	HANDLE		childstdoutrd,
-				childstdoutwr,
-				childstdoutrddup;
-	PROCESS_INFORMATION pi;
-	STARTUPINFO si;
-	char	   *retval = NULL;
-
-	sattr.nLength = sizeof(SECURITY_ATTRIBUTES);
-	sattr.bInheritHandle = TRUE;
-	sattr.lpSecurityDescriptor = NULL;
-
-	if (!CreatePipe(&childstdoutrd, &childstdoutwr, &sattr, 0))
-		return NULL;
-
-	if (!DuplicateHandle(GetCurrentProcess(),
-						 childstdoutrd,
-						 GetCurrentProcess(),
-						 &childstdoutrddup,
-						 0,
-						 FALSE,
-						 DUPLICATE_SAME_ACCESS))
-	{
-		CloseHandle(childstdoutrd);
-		CloseHandle(childstdoutwr);
-		return NULL;
-	}
-
-	CloseHandle(childstdoutrd);
-
-	ZeroMemory(&pi, sizeof(pi));
-	ZeroMemory(&si, sizeof(si));
-	si.cb = sizeof(si);
-	si.dwFlags = STARTF_USESTDHANDLES;
-	si.hStdError = childstdoutwr;
-	si.hStdOutput = childstdoutwr;
-	si.hStdInput = INVALID_HANDLE_VALUE;
-
-	if (CreateProcess(NULL,
-					  cmd,
-					  NULL,
-					  NULL,
-					  TRUE,
-					  0,
-					  NULL,
-					  NULL,
-					  &si,
-					  &pi))
-	{
-		/* Successfully started the process */
-		char	   *lineptr;
-
-		ZeroMemory(line, maxsize);
-
-		/* Try to read at least one line from the pipe */
-		/* This may require more than one wait/read attempt */
-		for (lineptr = line; lineptr < line + maxsize - 1;)
-		{
-			DWORD		bytesread = 0;
-
-			/* Let's see if we can read */
-			if (WaitForSingleObject(childstdoutrddup, 10000) != WAIT_OBJECT_0)
-				break;			/* Timeout, but perhaps we got a line already */
-
-			if (!ReadFile(childstdoutrddup, lineptr, maxsize - (lineptr - line),
-						  &bytesread, NULL))
-				break;			/* Error, but perhaps we got a line already */
-
-			lineptr += strlen(lineptr);
-
-			if (!bytesread)
-				break;			/* EOF */
-
-			if (strchr(line, '\n'))
-				break;			/* One or more lines read */
-		}
-
-		if (lineptr != line)
-		{
-			/* OK, we read some data */
-			int			len;
-
-			/* If we got more than one line, cut off after the first \n */
-			lineptr = strchr(line, '\n');
-			if (lineptr)
-				*(lineptr + 1) = '\0';
-
-			len = strlen(line);
-
-			/*
-			 * If EOL is \r\n, convert to just \n. Because stdout is a
-			 * text-mode stream, the \n output by the child process is
-			 * received as \r\n, so we convert it to \n.  The server main.c
-			 * sets setvbuf(stdout, NULL, _IONBF, 0) which has the effect of
-			 * disabling \n to \r\n expansion for stdout.
-			 */
-			if (len >= 2 && line[len - 2] == '\r' && line[len - 1] == '\n')
-			{
-				line[len - 2] = '\n';
-				line[len - 1] = '\0';
-				len--;
-			}
-
-			/*
-			 * We emulate fgets() behaviour. So if there is no newline at the
-			 * end, we add one...
-			 */
-			if (len == 0 || line[len - 1] != '\n')
-				strcat(line, "\n");
-
-			retval = line;
-		}
-
-		CloseHandle(pi.hProcess);
-		CloseHandle(pi.hThread);
-	}
-
-	CloseHandle(childstdoutwr);
-	CloseHandle(childstdoutrddup);
-
-	return retval;
-#endif							/* WIN32 */
 }
 
 
diff --git a/src/port/getaddrinfo.c b/src/port/getaddrinfo.c
index b8b7827356..3892fafb8c 100644
--- a/src/port/getaddrinfo.c
+++ b/src/port/getaddrinfo.c
@@ -69,10 +69,9 @@ haveNativeWindowsIPv6routines(void)
 		return (getaddrinfo_ptr != NULL);
 
 	/*
-	 * For Windows XP and Windows 2003 (and longhorn/vista), the IPv6 routines
-	 * are present in the WinSock 2 library (ws2_32.dll). Try that first
+	 * For Windows XP and later versions, the IPv6 routines are present in
+	 * the WinSock 2 library (ws2_32.dll).
 	 */
-
 	hLibrary = LoadLibraryA("ws2_32");
 
 	if (hLibrary == NULL || GetProcAddress(hLibrary, "getaddrinfo") == NULL)
@@ -83,13 +82,6 @@ haveNativeWindowsIPv6routines(void)
 		 */
 		if (hLibrary != NULL)
 			FreeLibrary(hLibrary);
-
-		/*
-		 * In Windows 2000, there was only the IPv6 Technology Preview look in
-		 * the IPv6 WinSock library (wship6.dll).
-		 */
-
-		hLibrary = LoadLibraryA("wship6");
 	}
 
 	/* If hLibrary is null, we couldn't find a dll with functions */
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index 7f1534aebb..bb6656e406 100644
--- a/src/bin/initdb/initdb.c
+++ b/src/bin/initdb/initdb.c
@@ -2016,11 +2016,10 @@ make_postgres(FILE *cmdfd)
  * exit() directly.
  *
  * Also note the behaviour of Windows with SIGINT, which says this:
- *	 Note	SIGINT is not supported for any Win32 application, including
- *	 Windows 98/Me and Windows NT/2000/XP. When a CTRL+C interrupt occurs,
- *	 Win32 operating systems generate a new thread to specifically handle
- *	 that interrupt. This can cause a single-thread application such as UNIX,
- *	 to become multithreaded, resulting in unexpected behavior.
+ *  SIGINT is not supported for any Win32 application. When a CTRL+C interrupt
+ *  occurs, Win32 operating systems generate a new thread to specifically
+ *  handle that interrupt. This can cause a single-thread application, such as
+ *  one in UNIX, to become multithreaded and cause unexpected behavior.
  *
  * I have no idea how to handle this. (Strange they call UNIX an application!)
  * So this will need some testing on Windows.
diff --git a/doc/src/sgml/install-windows.sgml b/doc/src/sgml/install-windows.sgml
index 08556b6ebe..e492d8957c 100644
--- a/doc/src/sgml/install-windows.sgml
+++ b/doc/src/sgml/install-windows.sgml
@@ -46,8 +46,7 @@
   <productname>Cygwin</productname> is not recommended for running a
   production server, and it should only be used for running on
   older versions of <productname>Windows</productname> where
-  the native build does not work, such as
-  <productname>Windows 98</productname>. The official
+  the native build does not work. The official
   binaries are built using <productname>Visual Studio</productname>.
  </para>
 

Attachment: signature.asc
Description: PGP signature

Reply via email to