@@ -1652,27 +1652,16 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
1652
1652
si .StartupInfo .hStdOutput = winansi_get_osfhandle (fhout );
1653
1653
si .StartupInfo .hStdError = winansi_get_osfhandle (fherr );
1654
1654
1655
+ /* The list of handles cannot contain duplicates */
1655
1656
if (si .StartupInfo .hStdInput != INVALID_HANDLE_VALUE )
1656
1657
stdhandles [stdhandles_count ++ ] = si .StartupInfo .hStdInput ;
1657
- if (si .StartupInfo .hStdOutput != INVALID_HANDLE_VALUE )
1658
+ if (si .StartupInfo .hStdOutput != INVALID_HANDLE_VALUE &&
1659
+ si .StartupInfo .hStdOutput != si .StartupInfo .hStdInput )
1658
1660
stdhandles [stdhandles_count ++ ] = si .StartupInfo .hStdOutput ;
1659
- if (si .StartupInfo .hStdError != INVALID_HANDLE_VALUE )
1661
+ if (si .StartupInfo .hStdError != INVALID_HANDLE_VALUE &&
1662
+ si .StartupInfo .hStdError != si .StartupInfo .hStdInput &&
1663
+ si .StartupInfo .hStdError != si .StartupInfo .hStdOutput )
1660
1664
stdhandles [stdhandles_count ++ ] = si .StartupInfo .hStdError ;
1661
-
1662
- /* The list of handles cannot contain duplicates */
1663
- if (stdhandles_count == 3 ) {
1664
- if (stdhandles [2 ] == stdhandles [0 ])
1665
- stdhandles_count =
1666
- stdhandles [2 ] == stdhandles [1 ] ? 1 : 2 ;
1667
- else if (stdhandles [2 ] == stdhandles [1 ])
1668
- stdhandles_count = 2 ;
1669
- else if (stdhandles [1 ] == stdhandles [0 ]) {
1670
- stdhandles_count = 2 ;
1671
- stdhandles [1 ] = stdhandles [2 ];
1672
- }
1673
- } else if (stdhandles_count == 2 && stdhandles [1 ] == stdhandles [0 ])
1674
- stdhandles_count = 1 ;
1675
-
1676
1665
if (stdhandles_count )
1677
1666
si .StartupInfo .dwFlags |= STARTF_USESTDHANDLES ;
1678
1667
0 commit comments