Implement same thing also for x-modem protocol. As x-modem protocol does not have header packet, first packet is directly first data packet.
Signed-off-by: Pali Rohár <p...@kernel.org> --- common/xyzModem.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/common/xyzModem.c b/common/xyzModem.c index d6be489a174b..39b40071a13b 100644 --- a/common/xyzModem.c +++ b/common/xyzModem.c @@ -50,6 +50,7 @@ static struct int len, mode, total_retries; int total_SOH, total_STX, total_CAN; bool crc_mode, at_eof, tx_ack; + bool first_xmodem_packet; unsigned long file_length, read_length; } xyz; @@ -439,12 +440,14 @@ xyzModem_stream_open (connection_info_t * info, int *err) xyz.total_CAN = 0; xyz.read_length = 0; xyz.file_length = 0; + xyz.first_xmodem_packet = false; CYGACC_COMM_IF_PUTC (*xyz.__chan, (xyz.crc_mode ? 'C' : NAK)); if (xyz.mode == xyzModem_xmodem) { /* X-modem doesn't have an information header - exit here */ + xyz.first_xmodem_packet = true; xyz.next_blk = 1; return 0; } @@ -512,6 +515,8 @@ xyzModem_stream_read (char *buf, int size, int *err) stat = xyzModem_get_hdr (); if (stat == 0) { + if (xyz.mode == xyzModem_xmodem && xyz.first_xmodem_packet) + xyz.first_xmodem_packet = false; if (xyz.blk == xyz.next_blk) { xyz.tx_ack = true; @@ -589,7 +594,7 @@ xyzModem_stream_read (char *buf, int size, int *err) xyz.total_retries++; ZM_DEBUG (zm_dprintf ("NAK (%d)\n", __LINE__)); } - if (stat < 0) + if (stat < 0 && (!xyz.first_xmodem_packet || stat != xyzModem_timeout)) { *err = stat; xyz.len = -1; -- 2.20.1