• A
    std: Fix inheriting standard handles on windows · c1149edf
    Alex Crichton 提交于
    Currently if a standard I/O handle is set to inherited on Windows, no action is
    taken and the slot in the process information description is set to
    `INVALID_HANDLE_VALUE`. Due to our passing of `STARTF_USESTDHANDLES`, however,
    this means that the handle is actually set to nothing and if a child tries to
    print it will generate an error.
    
    This commit fixes this behavior by explicitly creating stdio handles to be
    placed in these slots by duplicating the current process's I/O handles. This is
    presumably what previously happened silently by using a file-descriptor-based
    implementation instead of a `HANDLE`-centric implementation.
    
    Along the way this cleans up a lot of code in `Process::spawn` for Windows by
    ensuring destructors are always run, using more RAII, and limiting the scope of
    `unsafe` wherever possible.
    c1149edf
stdio.rs 5.0 KB