On Mon, 26 Sep 2011 17:30:42 -0400, Mehrdad <[email protected]> wrote:
On 9/26/2011 1:51 PM, Steven Schveighoffer wrote:
AHA!
Yes, there is a bug in snn.lib regarding pipes. And I fixed it,
waiting for Walter to incorporate it :) I needed it for the new
std.process.
What it comes down to is, DMC's FILE * implementation does not expect
some of the quirks of pipe HANDLEs. For instance, if you open a FILE *
around a pipe handle, it still tries to do a seek on that handle, and
crashes. Also, when the write end of a pipe is closed, reading from
the read end results in EPIPE from ReadFile, but this is translated to
EBADF by the runtime. Therefore, FILE * sets an error instead of EOF.
Is the email address you have for this message correct? If so, I can
send you a new version of snn.lib to try linking your code against (if
you are willing to go through these steps), to see if it fixes your
problem.
Using the command line dmd to build should be sufficient (I think).
-Steve
Thanks for the email.
It seems like it still crashes from SciTE, though. :(
When I try debugging, I see it's doing so inside _close() which is
/immediately/ above kernel32.dll!@BaseThreadInitThunk@12() -- in other
words, it seems to be called directly from the entrypoint of the
program, assuming it hasn't undergone optimizations. The error is:
0xC0000008: An invalid handle was specified.
Is there any other place in which this can happen?
Hm... its hard for me to say. Why would it be calling _close before
main() is called? Very strange. Is there any more stack information?
Can you get it to crash by using a pipe from the command line?
In other words:
myprogram | more
or echo hi | miprogram
?
If this isn't killing the program in the same way, then it might be a
different issue than the one I fixed.
-Steve