Skip to content

Commit 8a806e8

Browse files
committed
examples/pipe: fix write usage
write returns in case some bytes were written but not everything can fit. This wasn't the case in NuttX but commit d0680fd1bc51b7ead0b068fb24a31a144d22dc6c introduced this standard behavior.
1 parent 40a5e47 commit 8a806e8

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

examples/pipe/transfer_test.c

+17-11
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ static void *transfer_writer(pthread_addr_t pvarg)
139139
char buffer[WRITE_SIZE];
140140
int fd = (intptr_t)pvarg;
141141
int ret;
142+
int nbytes;
142143
int i;
143144

144145
printf("transfer_writer: started\n");
@@ -149,18 +150,23 @@ static void *transfer_writer(pthread_addr_t pvarg)
149150

150151
for (i = 0; i < NWRITES; i++)
151152
{
152-
ret = write(fd, buffer, WRITE_SIZE);
153-
if (ret < 0)
154-
{
155-
fprintf(stderr, \
156-
"transfer_writer: write failed, errno=%d\n", errno);
157-
return (void *)(uintptr_t)1;
158-
}
159-
else if (ret != WRITE_SIZE)
153+
for (nbytes = 0; nbytes < WRITE_SIZE; )
160154
{
161-
fprintf(stderr, \
162-
"transfer_writer: Unexpected write size=%d\n", ret);
163-
return (void *)(uintptr_t)2;
155+
ret = write(fd, buffer + nbytes, WRITE_SIZE - nbytes);
156+
if (ret < 0)
157+
{
158+
fprintf(stderr, \
159+
"transfer_writer: write failed, errno=%d\n", errno);
160+
return (void *)(uintptr_t)1;
161+
}
162+
else if (ret == 0)
163+
{
164+
fprintf(stderr, \
165+
"transfer_writer: Unexpected zero write size\n");
166+
return (void *)(uintptr_t)2;
167+
}
168+
169+
nbytes += ret;
164170
}
165171
}
166172

0 commit comments

Comments
 (0)