On Fri, 07 Apr 2017 15:45:42 +0200, Daniel Baluta wrote:
On Fri, Apr 7, 2017 at 4:27 PM, Takashi Iwai tiwai@suse.de wrote:
On Fri, 07 Apr 2017 15:20:36 +0200, Daniel Baluta wrote:
Read can return less then requested bytes, but we treat this as an error.
s/read/write here :)).
Actually that's the bug -- we should loop the write until it reaches to the real error. Once when we get the proper errno, the error message via perror() itself will be enough.
Correct. But I think aplay decided to keep things simple and fail in case couldn't write all requested bytes.
And that's wrong. We should loop instead.
This pattern can be noticed all over the places where write is used.
All wrong :)
We can implement a simple helper function and replace each write call with it.
Given the fact that write is blocking (meaning that it must write at least one byte until return) this should work most of the time, excepting corner cases like disk full, etc.
Yes, and such corner cases must be handled properly, too -- in the end, it's what you wanted to achieve by your patch, but into a different direction.
Takashi