From 07c6a700ba2a88231545844531f766ffd8b2d2a1 Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Sat, 17 Jul 2021 22:28:46 +0800
Subject: [PATCH] update comport.c
---
booster/comport.c | 58 +++++++++++++++++++---------------------------------------
1 files changed, 19 insertions(+), 39 deletions(-)
diff --git a/booster/comport.c b/booster/comport.c
index 30e814d..cdb21f5 100644
--- a/booster/comport.c
+++ b/booster/comport.c
@@ -281,7 +281,7 @@
int comport_send(comport_t *comport, char *buf, int send_bytes)
{
int rv = 0;
- char *ptr, *end;
+ char *ptr, left_bytes;
int send = 0;
if ( !comport || !buf || send_bytes<=0 )
@@ -300,48 +300,28 @@
//printf("Send %s with %d bytes.\n", buf, send_bytes);
- // Large data, then slice them and send
- if (comport->frag_size < send_bytes)
- {
- ptr = buf;
- end = buf + send_bytes;
- do
- {
- // Large than frag_size
- if (comport->frag_size < (end - ptr))
- {
- send = write(comport->fd, ptr, comport->frag_size);
- if (0 >= send || comport->frag_size != send)
- {
- rv = -4;
- goto CleanUp;
- }
- ptr += comport->frag_size;
- }
- else // Less than frag_size, maybe last fragmention.
- {
- send = write(comport->fd, ptr, (end - ptr));
- if (0 >= send || (end - ptr) != send)
- {
- rv = -4;
- goto CleanUp;
- }
- ptr += (end - ptr);
- }
- }
- while (ptr < end);
- }
- else // The send data is not large than a fragmention.
+ left_bytes = send_bytes;
+ ptr = buf;
+
+ while( left_bytes > 0 )
{
- send = write(comport->fd, buf, send_bytes);
- if (0 >= send || send_bytes != send)
- {
- rv = -5;
- goto CleanUp;
- }
+ /* Large data, then slice them to frag and send */
+ send = left_bytes>comport->frag_size ? comport->frag_size : left_bytes;
+
+ rv = write(comport->fd, ptr, send);
+ if( rv<0 )
+ {
+ rv = -4;
+ goto CleanUp;
+ }
+
+ left_bytes -= rv;
+ ptr += rv;
}
+ rv = 0;
+
CleanUp:
return rv;
}
--
Gitblit v1.9.1