anchao commented on code in PR #15132:
URL: https://github.com/apache/nuttx/pull/15132#discussion_r1886134104


##########
drivers/syslog/syslog_write.c:
##########
@@ -94,227 +98,118 @@ static bool syslog_safe_to_block(void)
  *
  ****************************************************************************/
 
-static ssize_t syslog_default_write(FAR const char *buffer, size_t buflen)
+ssize_t syslog_write_foreach(FAR const char *buffer,
+                             size_t buflen, bool force)
 {
-  size_t nwritten;
+  syslog_write_t write;
+  syslog_putc_t  putc;
+  size_t nwritten = 0;
+  ssize_t ret;
+  int i;
 
-  if (!syslog_safe_to_block())
+  for (i = 0; i < CONFIG_SYSLOG_MAX_CHANNELS; i++)
     {
-#ifdef CONFIG_SYSLOG_INTBUFFER
-      if (up_interrupt_context())
+      FAR syslog_channel_t *channel = g_syslog_channel[i];
+
+      if (channel == NULL)
         {
-          for (nwritten = 0; nwritten < buflen; nwritten++)
-            {
-              syslog_add_intbuffer(buffer[nwritten]);
-            }
+          break;
+        }
+
+#ifdef CONFIG_SYSLOG_IOCTL
+      if (channel->sc_state & SYSLOG_CHANNEL_DISABLE)
+        {
+          continue;
         }
-      else
 #endif
+
+      write = !force ? channel->sc_ops->sc_write :
+                       channel->sc_ops->sc_write_force;
+      if (write != NULL)
         {
-          int i;
+          nwritten = 0;
 
-          for (i = 0; i < CONFIG_SYSLOG_MAX_CHANNELS; i++)
+#ifdef CONFIG_SYSLOG_CRLF
+          if (!(channel->sc_state & SYSLOG_CHANNEL_DISABLE_CRLF))
             {
-              FAR syslog_channel_t *channel = g_syslog_channel[i];
-              nwritten = 0;
-
-              if (channel == NULL)
-                {
-                  break;
-                }
-
-#ifdef CONFIG_SYSLOG_IOCTL
-              if (channel->sc_state & SYSLOG_CHANNEL_DISABLE)
-                {
-                  continue;
-                }
-#endif
+              size_t head;
 
-              if (channel->sc_ops->sc_write_force != NULL)
+              for (head = 0; head < buflen; head++)
                 {
-#ifdef CONFIG_SYSLOG_CRLF
-                  if (!(channel->sc_state & SYSLOG_CHANNEL_DISABLE_CRLF))
+                  if (buffer[head] != '\n')
                     {
-                      size_t head;
-
-                      for (head = 0; head < buflen; head++)
-                        {
-                          ssize_t ret;
-
-                          /* Check for LF */
-
-                          if (buffer[head] != '\n')
-                            {
-                              continue;
-                            }
-
-                          ret = channel->sc_ops->sc_write_force(channel,
-                                                          buffer + nwritten,
-                                                          head - nwritten);
-                          if (ret < 0)
-                            {
-                              return ret;
-                            }
-
-                          ret = channel->sc_ops->sc_write_force(channel,
-                                                                "\r\n", 2);
-                          if (ret < 0)
-                            {
-                              return ret;
-                            }
-
-                          nwritten = head + 1;
-                        }
+                      continue;
                     }
-#endif
 
-                  if (nwritten < buflen)
+                  ret = write(channel, buffer + nwritten, head - nwritten);
+                  if (ret >= 0)
                     {
-                      ssize_t ret;
-
-                      ret = channel->sc_ops->sc_write_force(channel,
-                                                          buffer + nwritten,
-                                                          buflen - nwritten);
-                      if (ret < 0)
-                        {
-                          return ret;
-                        }
-                      else
-                        {
-                          nwritten += ret;
-                        }
+                      ret = write(channel, "\r\n", 2);
                     }
-                }
-              else
-                {
-                  DEBUGASSERT(channel->sc_ops->sc_force != NULL);
-                  for (nwritten = 0; nwritten < buflen; nwritten++)
-                    {
-#ifdef CONFIG_SYSLOG_CRLF
-                      /* Check for LF */
 
-                      if (buffer[nwritten] == '\n' &&
-                          !(channel->sc_state & SYSLOG_CHANNEL_DISABLE_CRLF))
-                        {
-                          /* Add CR */
+                  if (ret < 0)
+                    {
+                      return ret;
+                    }
 
-                          channel->sc_ops->sc_force(channel, '\r');
-                        }
+                  nwritten = head + 1;
+                }
+            }
 #endif
 
-                      channel->sc_ops->sc_force(channel, buffer[nwritten]);
-                    }
+          if (nwritten < buflen)
+            {
+              ret = write(channel, buffer + nwritten, buflen - nwritten);
+              if (ret < 0)
+                {
+                  return ret;
+                }
+              else
+                {
+                  nwritten += ret;
                 }
             }
         }
-    }
-  else
-    {
-      int i;
-
-      for (i = 0; i < CONFIG_SYSLOG_MAX_CHANNELS; i++)
+      else
         {
-          FAR syslog_channel_t *channel = g_syslog_channel[i];
-          nwritten = 0;
-
-          if (channel == NULL)
-            {
-              break;
-            }
-
-#ifdef CONFIG_SYSLOG_IOCTL
-          if (channel->sc_state & SYSLOG_CHANNEL_DISABLE)
+          putc = !force ? channel->sc_ops->sc_putc :

Review Comment:
   if branch is fast than else, most of the time we call sc_putc()



##########
drivers/syslog/syslog_write.c:
##########
@@ -333,8 +228,23 @@ static ssize_t syslog_default_write(FAR const char 
*buffer, size_t buflen)
 
 ssize_t syslog_write(FAR const char *buffer, size_t buflen)
 {
+  bool force;
+
+  force = !syslog_safe_to_block();

Review Comment:
   Done



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to