};
add_recv_timestamp(&lem.header, server->time);
- // TODO: I have no idea if the following is flawless, nor do I like it.
lem.header.tag_len = strlen(strncpy((char *)&lem + lem.header.len, wr->stdout_data->tag, sizeof(lem) - lem.header.len - 1));
lem.header.len += lem.header.tag_len + 1;
- if (sizeof(lem) - lem.header.len - 1 >= 1)
- lem.header.len += strlen(strncpy((char *)&lem + lem.header.len, wr->buffer, sizeof(lem) - lem.header.len - 1));
- if (sizeof(lem) > lem.header.len)
- lem.header.len += 1;
+ assert(lem.header.len <= sizeof(lem));
+ assert(((char *)&lem)[lem.header.len - 1] == '\0');
+ int cut;
+ if (sizeof(lem) - lem.header.len - 1 >= 1) {
+ cut = strlen(strncpy((char *)&lem + lem.header.len, wr->buffer, sizeof(lem) - lem.header.len - 1));
+ lem.header.len += cut + 1;
+ }
+ else
+ return -EINVAL;
+ assert(lem.header.len <= sizeof(lem));
+ assert(((char *)&lem)[lem.header.len - 1] == '\0');
if (qos_is_enabled(&server->qos))
qos_add_log(&server->qos, &lem.header);
if (r != 0)
return r;
- int cut = strlen(wr->buffer) + 1;
+ if (wr->buffer[cut] == '\0')
+ cut += 1;
if (cut == sizeof(wr->buffer)) {
// This will happen if the buffer was full.
wr->readed = 0;