Web lists-archives.com

Re: [PATCH v1 1/4] transport-helper: use xread instead of read




randall.s.becker@xxxxxxxxxx writes:

> From: "Randall S. Becker" <rsbecker@xxxxxxxxxxxxx>
>
> This fix was needed on HPE NonStop NSE and NSX where SSIZE_MAX is less than
> BUFFERSIZE resulting in EINVAL. The call to read in transport-helper.c
> was the only place outside of wrapper.c where it is used instead of xread.
>
> Signed-off-by: Randall S. Becker <rsbecker@xxxxxxxxxxxxx>
> ---
>  transport-helper.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/transport-helper.c b/transport-helper.c
> index bf225c698f..a290695a12 100644
> --- a/transport-helper.c
> +++ b/transport-helper.c
> @@ -1225,7 +1225,7 @@ static int udt_do_read(struct unidirectional_transfer *t)
>  		return 0;	/* No space for more. */
>  
>  	transfer_debug("%s is readable", t->src_name);
> -	bytes = read(t->src, t->buf + t->bufuse, BUFFERSIZE - t->bufuse);
> +	bytes = xread(t->src, t->buf + t->bufuse, BUFFERSIZE - t->bufuse);
>  	if (bytes < 0 && errno != EWOULDBLOCK && errno != EAGAIN &&
>  		errno != EINTR) {
>  		error_errno(_("read(%s) failed"), t->src_name);

As Peff pointed out in the earlier round of the same patch,
replacing read() with xread() here will affect what errno's can be
possible after the function returns.  The checks affected by this
change must also be updated, either in the same patch, or a
follow-up patch in the same series.  Otherwise we _will_ forget to
clean them up.