The filesize is not known for push requests and barebox always sent
'0'.  Server might reject data because it will always exceed this
length.

Send this option only for rrq requests.

Signed-off-by: Enrico Scholz <[email protected]>
---
 fs/tftp.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/fs/tftp.c b/fs/tftp.c
index 7edea904aabe..c00857ecfa28 100644
--- a/fs/tftp.c
+++ b/fs/tftp.c
@@ -403,22 +403,26 @@ static int tftp_send(struct file_priv *priv)
                                "octet%c"
                                "timeout%c"
                                "%d%c"
-                               "tsize%c"
-                               "%lld%c"
                                "blksize%c"
                                "%u",
                                priv->filename + 1, '\0',
                                '\0',   /* "octet" */
                                '\0',   /* "timeout" */
                                TIMEOUT, '\0',
-                               '\0',   /* "tsize" */
-                               priv->filesize, '\0',
                                '\0',   /* "blksize" */
                                /* use only a minimal blksize for getattr
                                   operations, */
                                priv->is_getattr ? TFTP_BLOCK_SIZE : 
TFTP_MTU_SIZE);
                pkt++;
 
+               if (!priv->push)
+                       /* we do not know the filesize in WRQ requests and
+                          'priv->filesize' will always be zero */
+                       pkt += sprintf((unsigned char *)pkt,
+                                      "tsize%c%lld%c",
+                                      '\0', priv->filesize,
+                                      '\0');
+
                if (window_size > 1)
                        pkt += sprintf((unsigned char *)pkt,
                                       "windowsize%c%u%c",
-- 
2.37.2


Reply via email to