Log 4k write to file function

Change-Id: Ic297ce4aa25dce9e86395a26fae92e0530988255
diff --git a/mbtk/mbtk_logd/syslog_read.c b/mbtk/mbtk_logd/syslog_read.c
index 8af9dac..94f16a8 100755
--- a/mbtk/mbtk_logd/syslog_read.c
+++ b/mbtk/mbtk_logd/syslog_read.c
@@ -59,6 +59,10 @@
 	LOG_TIME,
 	__LOG_MAX
 };
+    
+#define    SYSLOG_BUFF_SIZE (4*1024)
+#define    MAX_BUFFER_SIZE (8*1024)
+
 
 static const struct blobmsg_policy log_policy[] = {
 	[LOG_MSG] = { .name = "msg", .type = BLOBMSG_TYPE_STRING },
@@ -179,6 +183,9 @@
 	time_t t;
 	char *c, *m;
 
+    static char buffer[MAX_BUFFER_SIZE] = {0};
+    static int buffer_index = 0;
+    
 	//
 	//sprintf(tmp_buf, "/tmp/log%s", strstr_tail(log_file, "/"));
 
@@ -187,24 +194,28 @@
     if(access(tmp_buf, W_OK) != 0)
     {
         sender.fd = open(tmp_buf, O_CREAT | O_WRONLY | O_APPEND, 0600);
+        if(sender.fd < 0)
+        {
+            perror("Failed to open file ");
+            return -1;
+        }
     }
-
-    if (sender.fd < 0)
-    {
-        return 0;
-    }
-
+    
+    
+   
 	blobmsg_parse(log_policy, ARRAY_SIZE(log_policy), tb, blob_data(msg), blob_len(msg));
 	if (!tb[LOG_ID] || !tb[LOG_PRIO] || !tb[LOG_SOURCE] || !tb[LOG_TIME] || !tb[LOG_MSG])
 		return 1;
 
-	if ((log_type == LOG_FILE) && log_size && (!stat(tmp_log, &s)) && (s.st_size > log_size)) {
-        sender.fd = get_rotate_file(sender.fd, log_file, &file_list);
-		if (sender.fd < 0) {
-			fprintf(stderr, "failed to open %s: %s\n", tmp_log, strerror(errno));
-			exit(-1);
-        }
-	}
+    if ((log_type == LOG_FILE) && log_size && (!stat(tmp_log, &s)) && (s.st_size > log_size))
+    {
+            sender.fd = get_rotate_file(sender.fd, log_file, &file_list);
+            if (sender.fd < 0) 
+            {
+                fprintf(stderr, "failed to open %s: %s\n", tmp_log, strerror(errno));
+                exit(-1);
+            }
+    }
 
 	m = blobmsg_get_string(tb[LOG_MSG]);
 	t = blobmsg_get_u64(tb[LOG_TIME]) / 1000;
@@ -219,7 +230,8 @@
         return 0;
         //exit(-1);
     }
-	if (log_type == LOG_NET) {
+	if (log_type == LOG_NET) 
+	{
 		int err;
 
 		snprintf(buf, sizeof(buf), "<%u>", p);
@@ -248,7 +260,9 @@
 			sender.fd = -1;
 			uloop_timeout_set(&retry, 1000);
 		}
-	} else {
+	} 
+	else 
+	{
 		snprintf(buf, sizeof(buf), "%s %s.%s%s %s\n",
 			c, getcodetext(LOG_FAC(p) << 3, facilitynames), getcodetext(LOG_PRI(p), prioritynames),
 			(blobmsg_get_u32(tb[LOG_SOURCE])) ? ("") : (" kernel:"), m);
@@ -261,12 +275,37 @@
                         buf[index] ^= 1;
                     }
                 }
-		write(sender.fd, buf, strlen(buf));
+                
+
+         
+        if (buffer_index >= SYSLOG_BUFF_SIZE)
+        {
+            // Flush the buffer if it's full
+            if (write(sender.fd, buffer, buffer_index) < 0) 
+            {
+                perror("write error");
+                return -1;
+            }
+            buffer_index = 0; // Reset buffer index after flushing
+        }
+        
+        if(len < SYSLOG_BUFF_SIZE)
+        {
+            //copy buf to buffer 
+            memcpy(buffer + buffer_index, buf, len);
+            buffer_index += len;
+        }
+        else
+        {
+            write(sender.fd, buf, len);
+        }
+        
+       
 	}
 
 	free(str);
-	if (log_type == LOG_FILE)
-		fsync(sender.fd);
+	//if (log_type == LOG_FILE)
+	//fsync(sender.fd);
 
 	return 0;
 }
@@ -569,6 +608,7 @@
 			
 			//直接将log文件存储在不会掉电丢失的路径
 			snprintf(tmp_log,sizeof(tmp_log), "%s",log_file);
+            
 			sender.fd = open(tmp_log, O_CREAT | O_WRONLY| O_APPEND, 0600);
 			if (sender.fd < 0) {
 				fprintf(stderr, "failed to open %s: %s\n", tmp_log, strerror(errno));
@@ -577,7 +617,6 @@
 		} else {
 			sender.fd = STDOUT_FILENO;
 		}
-
 		ubus_invoke_async(ctx, id, "read", b.head, &req);
 		req.fd_cb = logread_fd_cb;
 		req.complete_cb = logread_complete_cb;