diff options
author | Eric Andersen | 2004-06-22 10:18:30 +0000 |
---|---|---|
committer | Eric Andersen | 2004-06-22 10:18:30 +0000 |
commit | 4872ed9737c1349aec2f41b1b8a905a9158da5c1 (patch) | |
tree | 94b214366ce9fe141a9c2489f84ca91f9bbfcafa | |
parent | 7f94a5caa251d3d539bbcf75eb97f11824c577ee (diff) | |
download | busybox-4872ed9737c1349aec2f41b1b8a905a9158da5c1.zip busybox-4872ed9737c1349aec2f41b1b8a905a9158da5c1.tar.gz |
Robin Farine writes:
Hi,
Package: BusyBox
Version: 1.0.0-pre10
When an incomplete read or write from/to a local file occurs (i.e.
not an EOF condition), the tftp client prematurely exits. This
problem can be reproduced by slowly piping data to the tftp client
like this:
(for v in 1 2 3; do echo $v; sleep 1; done) | \
tftp -p -l - -r output.txt <host>
The output file on the TFTP server will contain "1".
The attached patch provides a possible solution to this problem.
I can reproduce this on ARM sa1110 and ARM xscale boards, both
running Linux-2.6.4 & glibc-2.3.2. Thanks for the wonderful
program!
Robin
-rw-r--r-- | networking/tftp.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/networking/tftp.c b/networking/tftp.c index bfa9897..02ddb4d 100644 --- a/networking/tftp.c +++ b/networking/tftp.c @@ -267,7 +267,7 @@ static inline int tftp(const int cmd, const struct hostent *host, block_nr++; if (cmd_put && (opcode == TFTP_DATA)) { - len = read(localfd, cp, tftp_bufsize - 4); + len = bb_full_read(localfd, cp, tftp_bufsize - 4); if (len < 0) { bb_perror_msg("read"); @@ -444,7 +444,7 @@ static inline int tftp(const int cmd, const struct hostent *host, if (tmp == block_nr) { - len = write(localfd, &buf[4], len - 4); + len = bb_full_write(localfd, &buf[4], len - 4); if (len < 0) { bb_perror_msg("write"); |