On Fri Jul 18 10:19:43 2025 +0000, Alfred Agrell wrote:
I completely agree find shouldn't touch stdin unless arguments say it should but it does
#include <windows.h> int main(int argc, char** argv) { SECURITY_ATTRIBUTES sa = { sizeof(sa), 0, TRUE }; STARTUPINFOA si = { sizeof(si) }; PROCESS_INFORMATION pi; HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE); HANDLE nul = CreateFileA("NUL", GENERIC_READ, FILE_SHARE_WRITE|FILE_SHARE_READ, &sa, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); DWORD dummy; WriteFile(stdout, "first\r\n", strlen("first\r\n"), &dummy, NULL); si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = NULL; si.hStdOutput = stdout; si.hStdError = stdout; CreateProcessA(NULL, "cmd /c find /?", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); WaitForSingleObject(pi.hProcess, INFINITE); WriteFile(stdout, "second\r\n", strlen("second\r\n"), &dummy, NULL); si.hStdInput = nul; CreateProcessA(NULL, "cmd /c find /?", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); WaitForSingleObject(pi.hProcess, INFINITE); WriteFile(stdout, "done\r\n", strlen("done\r\n"), &dummy, NULL); return 0; }
on wine, this returns unknown argument twice. On native, the second call returns usage, first returns a blank string.