Fix and simplify PrepareCommandsForSourcing
Spotted some problems in the Driver's PrepareCommandsForSourcing while helping a colleague track another problem. 1. One error case was not handled because there was no else clause. Fixed by switching to llvm's early-out style instead of nested `if (succes) { } else { }` cases. This keeps error handling close to the actual error. 2. One call-site failed to call the clean-up function. I solved this by simplifying the API. PrepareCommandsForSourcing no longer requires the caller to provide a buffer for the pipe's file descriptors and to call a separate clean-up function later. PrepareCommandsForSourcing now ensures the file descriptors are handled before returning. (The read end of the pipe is held open by the returned FILE * as before.) I also eliminated an unnecessary local, shorted the lifetime of another, and tried to improve the comments. I wrapped the call to open the pipe to get the `#ifdef`s out of the mainline. I replaced the `close`/`_close` calls with a platform-neutral helper from `llvm::sys` for the same reason. Per discussion on the review, I'm leaving the `fdopen` call to use the spelling that Windows has officially deprecated because it still works it avoids more `#ifdef`s. Differential Revision: https://reviews.llvm.org/D60152 llvm-svn: 357626
Loading
Please sign in to comment