diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2007-07-05 18:01:51 +0200 |
---|---|---|
committer | Sascha Hauer <sha@octopus.labnet.pengutronix.de> | 2007-07-05 18:01:51 +0200 |
commit | aa3f43b9f5800a8af765af5b2e4beebbc3ab7767 (patch) | |
tree | 04a11a267f878f6f5310a001fce80ded33f09c90 /net | |
parent | 8dcf04a2c654f2ff425475e440876375df09229c (diff) | |
download | barebox-aa3f43b9f5800a8af765af5b2e4beebbc3ab7767.tar.gz barebox-aa3f43b9f5800a8af765af5b2e4beebbc3ab7767.tar.xz |
svn_rev_408
store_block can fail
Diffstat (limited to 'net')
-rw-r--r-- | net/tftp.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/net/tftp.c b/net/tftp.c index 2de87385eb..2556c90cb6 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -10,6 +10,7 @@ #include <driver.h> #include <clock.h> #include <fs.h> +#include <errno.h> #include "tftp.h" #include "bootp.h" @@ -60,16 +61,20 @@ static char *tftp_filename; extern int net_store_fd; -static __inline__ void +static int store_block (unsigned block, uchar * src, unsigned len) { ulong offset = block * TFTP_BLOCK_SIZE + TftpBlockWrapOffset; ulong newsize = offset + len; + int ret; - write(net_store_fd, src, len); + ret = write(net_store_fd, src, len); + if (ret < 0) + return ret; if (NetBootFileXferSize < newsize) NetBootFileXferSize = newsize; + return 0; } static void TftpSend (void); @@ -245,7 +250,11 @@ TftpHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len) TftpLastBlock = TftpBlock; NetSetTimeout (TIMEOUT * SECOND, TftpTimeout); - store_block (TftpBlock - 1, pkt + 2, len); + if (store_block (TftpBlock - 1, pkt + 2, len) < 0) { + perror("write"); + NetState = NETLOOP_FAIL; + return; + } /* * Acknoledge the block just received, which will prompt |