summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-05 18:01:51 +0200
committerSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-07-05 18:01:51 +0200
commitaa3f43b9f5800a8af765af5b2e4beebbc3ab7767 (patch)
tree04a11a267f878f6f5310a001fce80ded33f09c90 /net
parent8dcf04a2c654f2ff425475e440876375df09229c (diff)
downloadbarebox-aa3f43b9f5800a8af765af5b2e4beebbc3ab7767.tar.gz
barebox-aa3f43b9f5800a8af765af5b2e4beebbc3ab7767.tar.xz
svn_rev_408
store_block can fail
Diffstat (limited to 'net')
-rw-r--r--net/tftp.c15
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