ping tech@,

Any developer can comment on this patch? Thanks!

On 9/25/2018 10:10 PM, Nan Xiao wrote:
> Hi tech@,
> 
> I am reading write(2) manual, and come across the following example:
> 
> for (off = 0; off < bsz; off += nw)
>       if ((nw = write(d, buf + off, bsz - off)) == 0 || nw == -1)
>               err(1, "write");
> 
> I am just wondering when the write(2) will return 0? If in some cases,
> it will indeed return 0, according to the manual:
> 
>> Upon successful completion the number of bytes which were written is
> returned. Otherwise, a -1 is returned and the global variable errno is
> set to indicate the error.
> 
> Because the errno is only set when return value is -1, if write(2)
> returns 0, the errno should be an undefined value, and "err(1,
> "write");" also won't print correct information.
> 
> If write(2) won't return 0, my following patch fixes the example code:
> 
> diff --git write.2 write.2
> index c1686b1a910..db134959002 100644
> --- write.2
> +++ write.2
> @@ -164,7 +164,7 @@ ssize_t nw;
>  int d;
> 
>  for (off = 0; off < bsz; off += nw)
> -     if ((nw = write(d, buf + off, bsz - off)) == 0 || nw == -1)
> +     if ((nw = write(d, buf + off, bsz - off)) == -1)
>               err(1, "write");
>  .Ed
>  .Sh ERRORS
> 
> Thanks!
> 

-- 
Best Regards
Nan Xiao(肖楠)

Reply via email to