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>
signature.asc
Description: PGP signature