logd: prevent the buffer from being bigger than the maximum ubus size
[project/ubox.git] / log / syslog.c
index fcc4a74..d0b528d 100644 (file)
@@ -30,6 +30,8 @@
 #include <libubox/usock.h>
 #include <libubox/ustream.h>
 
+#include <ubusmsg.h>
+
 #include "syslog.h"
 
 #define LOG_DEFAULT_SIZE       (16 * 1024)
@@ -274,8 +276,15 @@ log_buffer_init(int size)
 }
 
 void
-log_init(void)
+log_init(int _log_size)
 {
+       if (_log_size > 0)
+               log_size = _log_size;
+
+       /* reserve 512 bytes for protocol overhead */
+       if (log_size > (UBUS_MAX_MSGLEN -  512))
+               log_size = UBUS_MAX_MSGLEN - 512;
+
        regcomp(&pat_prio, "^<([0-9]*)>(.*)", REG_EXTENDED);
        regcomp(&pat_tstamp, "^\[[ 0]*([0-9]*).([0-9]*)] (.*)", REG_EXTENDED);