nshlib/cmd_dd: Retry if read() was interrupted

Without this patch

  nsh> ls /etc/group | dd | dd
  sh [13:100]
  sh [14:100]
  nsh: dd: read failed: 4
  nsh>

Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com>
This commit is contained in:
wangjianyu3
2024-11-10 23:18:00 +08:00
committed by Xiang Xiao
parent ebc19a60ff
commit 27b5021e0d

View File

@@ -126,6 +126,11 @@ static int dd_read(FAR struct dd_s *dd)
nbytes = read(dd->infd, buffer, dd->sectsize - dd->nbytes);
if (nbytes < 0)
{
if (errno == EINTR)
{
continue;
}
FAR struct nsh_vtbl_s *vtbl = dd->vtbl;
nsh_error(vtbl, g_fmtcmdfailed, g_dd, "read", NSH_ERRNO);
return ERROR;
@@ -134,7 +139,7 @@ static int dd_read(FAR struct dd_s *dd)
dd->nbytes += nbytes;
buffer += nbytes;
}
while (dd->nbytes < dd->sectsize && nbytes > 0);
while (dd->nbytes < dd->sectsize && nbytes != 0);
dd->eof |= (dd->nbytes == 0);
return OK;