Hi Jan, Jan Vangorp wrote,
The man page for fopencookie prescribes that custom write functions should return 0 on error (and should definitely not return a negative value) [1].
However, the uClibc implementation expects a negative return value in case of an error (libc/stdio/_WRITE.c). If the write function returns 0 on error, we drop into an infinite loop if the error persists.
This patch wraps the user supplied write function such that a 0 return value is converted to -1. errno is first set to EAGAIN such that if the custom write function does not set errno in case of error, this is treated as a "soft" error.
Custom write functions that cater towards uClibc and _do_ return a negative value are not affected.
If no custom write function is supplied, set errno to EINVAL such that this condition is treated as a "hard" error. Previously the behaviour depended on whether the last error before the write happened to be a "hard" or a "soft" error.
[1] http://git.kernel.org/cgit/docs/man-pages/man-pages.git/tree/man3/fopencooki...
Signed-off-by: Jan Vangorp jan.vangorp_ext@softathome.com
Thanks, committed and pushed, Waldemar