> It's possible that this fix is a full and correct solution. If the > descriptor has room for at least one byte, `write' won't return > EAGAIN; it will write at least one byte. It may write less than the > whole buffer that was specified. If the stdio code handles that case > correctly, the results should be correct.
That depends on your definition of "correctly". I suspect that all stdio implementations handle short writes by immediately doing another write for the remaining data, which in this case will immediately fail with EAGAIN and we're back to where we started. If that's what happens, it ought to give good results. When the second `write' call fails with EAGAIN, the "temporary workaround" will call `select' and wait until there is space. This may not be optimally elegant, but it is adequate. It will write all the data, and it won't busy-wait. Do we need more? > If the current fix does not make it correct, please do make the larger > fix--do your own buffering. That is surely not really a large job. Replacing stdio isn't a large job?!? Replacing stdio, that is to say writing another stdio implementation, would be a large job, but doing your own buffering is a much smaller job. You can still use the complex parts of stdio, via sprintf, if you need them. However, it currently looks like no further change is needed. > The right program to fix, in a case like this, is whichever one we > actually can get fixed. No, the right program to fix is the one that's broken: ssh. My understanding is that the openssh developers don't think that this is broken, and declined to change it. However, I am not sure of that. Do you know? If you convince them to change this, that would be fine. _______________________________________________ Bug-cvs mailing list Bug-cvs@gnu.org http://lists.gnu.org/mailman/listinfo/bug-cvs