| 102 | ****************************************************************************/ |
| 103 | |
| 104 | ssize_t syslog_write_foreach(FAR const char *buffer, |
| 105 | size_t buflen, bool force) |
| 106 | { |
| 107 | syslog_write_t write; |
| 108 | syslog_putc_t putc; |
| 109 | size_t nwritten = 0; |
| 110 | size_t nwritten_max = 0; |
| 111 | ssize_t ret; |
| 112 | int i; |
| 113 | |
| 114 | for (i = 0; i < CONFIG_SYSLOG_MAX_CHANNELS; i++) |
| 115 | { |
| 116 | FAR syslog_channel_t *channel = g_syslog_channel[i]; |
| 117 | |
| 118 | if (channel == NULL) |
| 119 | { |
| 120 | break; |
| 121 | } |
| 122 | |
| 123 | #ifdef CONFIG_SYSLOG_IOCTL |
| 124 | if (channel->sc_state & SYSLOG_CHANNEL_DISABLE) |
| 125 | { |
| 126 | continue; |
| 127 | } |
| 128 | #endif |
| 129 | |
| 130 | write = !force ? channel->sc_ops->sc_write : |
| 131 | channel->sc_ops->sc_write_force; |
| 132 | if (write != NULL) |
| 133 | { |
| 134 | nwritten = 0; |
| 135 | |
| 136 | #ifdef CONFIG_SYSLOG_CRLF |
| 137 | if (!(channel->sc_state & SYSLOG_CHANNEL_DISABLE_CRLF)) |
| 138 | { |
| 139 | size_t head; |
| 140 | |
| 141 | for (head = 0; head < buflen; head++) |
| 142 | { |
| 143 | if (buffer[head] != '\n') |
| 144 | { |
| 145 | continue; |
| 146 | } |
| 147 | |
| 148 | ret = write(channel, buffer + nwritten, head - nwritten); |
| 149 | if (ret >= 0) |
| 150 | { |
| 151 | ret = write(channel, "\r\n", 2); |
| 152 | } |
| 153 | |
| 154 | if (ret < 0) |
| 155 | { |
| 156 | return ret; |
| 157 | } |
| 158 | |
| 159 | nwritten = head + 1; |
| 160 | } |
| 161 | } |
no test coverage detected