diff --git a/src/backend.c b/src/backend.c index de6ce9c5d..1989359a9 100644 --- a/src/backend.c +++ b/src/backend.c @@ -369,31 +369,24 @@ static bool opencl_test_instruction (hashcat_ctx_t *hashcat_ctx, cl_context cont OCL_PTR *ocl = (OCL_PTR *) backend_ctx->ocl; - // LLVM seems to write an error message (if there's an error) directly to stderr - // and not (as supposted to) into buffer for later request using clGetProgramBuildInfo() + const int fd_stderr = fileno (stderr); #ifndef DEBUG - #ifndef _WIN - fflush (stderr); - int bak = fcntl(2, F_DUPFD_CLOEXEC); - int tmp = open ("/dev/null", O_WRONLY | O_CLOEXEC); - dup2 (tmp, 2); + const int stderr_bak = dup (fd_stderr); + #ifdef _WIN + const int tmp = open ("NUL", O_WRONLY); + #else + const int tmp = open ("/dev/null", O_WRONLY); + #endif + dup2 (tmp, fd_stderr); close (tmp); #endif - #endif - int CL_rc = ocl->clBuildProgram (program, 1, &device, "-Werror", NULL, NULL); // do not use the wrapper to avoid the error message + const int CL_rc = ocl->clBuildProgram (program, 1, &device, NULL, NULL, NULL); #ifndef DEBUG - #ifndef _WIN - fflush (stderr); - #ifndef __APPLE__ - dup3 (bak, 2, O_CLOEXEC); - #else - dup2 (bak, 2); - #endif - close (bak); - #endif + dup2 (stderr_bak, fd_stderr); + close (stderr_bak); #endif if (CL_rc != CL_SUCCESS)