/* If its full or terminated, ignore it */
bufline->raw = 0;
- lrb_assert(bufline->len <= LINEBUF_DATA_SIZE);
+ lrb_assert(bufline->len <= LINEBUF_SIZE);
if(bufline->terminated == 1)
return 0;
return -1;
/* This is the ~overflow case..This doesn't happen often.. */
- if(cpylen > (LINEBUF_DATA_SIZE - bufline->len))
+ if(cpylen > (LINEBUF_SIZE - bufline->len))
{
- cpylen = LINEBUF_DATA_SIZE - bufline->len;
+ cpylen = LINEBUF_SIZE - bufline->len;
memcpy(bufch, ch, cpylen);
- bufline->buf[LINEBUF_DATA_SIZE] = '\0';
- bufch = bufline->buf + LINEBUF_DATA_SIZE - 1;
+ bufline->buf[LINEBUF_SIZE] = '\0';
+ bufch = bufline->buf + LINEBUF_SIZE - 1;
while(cpylen && (*bufch == '\r' || *bufch == '\n'))
{
*bufch = '\0';
bufch--;
}
bufline->terminated = 1;
- bufline->len = LINEBUF_DATA_SIZE;
- bufhead->len += LINEBUF_DATA_SIZE;
+ bufline->len = LINEBUF_SIZE;
+ bufhead->len += LINEBUF_SIZE;
return clen;
}
/* If its full or terminated, ignore it */
bufline->raw = 1;
- lrb_assert(bufline->len <= LINEBUF_DATA_SIZE);
+ lrb_assert(bufline->len <= LINEBUF_SIZE);
if(bufline->terminated == 1)
return 0;
return -1;
/* This is the overflow case..This doesn't happen often.. */
- if(cpylen > (LINEBUF_DATA_SIZE - bufline->len))
+ if(cpylen > (LINEBUF_SIZE - bufline->len))
{
- clen = LINEBUF_DATA_SIZE - bufline->len;
+ clen = LINEBUF_SIZE - bufline->len;
memcpy(bufch, ch, clen);
- bufline->buf[LINEBUF_DATA_SIZE] = '\0';
+ bufline->buf[LINEBUF_SIZE] = '\0';
bufline->terminated = 1;
- bufline->len = LINEBUF_DATA_SIZE;
- bufhead->len += LINEBUF_DATA_SIZE;
+ bufline->len = LINEBUF_SIZE;
+ bufhead->len += LINEBUF_SIZE;
return clen;
}
}
/*
- * rb_linebuf_putmsg
+ * rb_linebuf_put
*
- * Similar to rb_linebuf_put, but designed for use by send.c.
- *
- * prefixfmt is used as a format for the varargs, and is inserted first.
- * Then format/va_args is appended to the buffer.
+ * linked list of strings are appended in order.
*/
void
-rb_linebuf_putmsg(buf_head_t * bufhead, const char *format, va_list * va_args,
- const char *prefixfmt, ...)
+rb_linebuf_put(buf_head_t *bufhead, const rb_strf_t *strings)
{
buf_line_t *bufline;
- int len = 0;
- va_list prefix_args;
+ size_t len = 0;
+ int ret;
/* make sure the previous line is terminated */
- if(bufhead->list.tail)
- {
+ if (bufhead->list.tail) {
bufline = bufhead->list.tail->data;
lrb_assert(bufline->terminated);
}
- /* Create a new line */
+ /* create a new line */
bufline = rb_linebuf_new_line(bufhead);
- if(prefixfmt != NULL)
- {
- va_start(prefix_args, prefixfmt);
- len = vsnprintf(bufline->buf, LINEBUF_DATA_SIZE + 1, prefixfmt, prefix_args);
- va_end(prefix_args);
- }
-
- if(va_args != NULL)
- {
- len += vsnprintf((bufline->buf + len), (LINEBUF_DATA_SIZE - len) + 1, format, *va_args);
- }
-
- bufline->terminated = 1;
-
- /* Truncate the data if required */
- if(len > LINEBUF_DATA_SIZE)
- {
- len = LINEBUF_DATA_SIZE;
- bufline->buf[len++] = '\r';
- bufline->buf[len++] = '\n';
- }
- else if(len == 0)
- {
- bufline->buf[len++] = '\r';
- bufline->buf[len++] = '\n';
- bufline->buf[len] = '\0';
- }
- else
- {
- /* Chop trailing CRLF's .. */
- while((bufline->buf[len] == '\r') || (bufline->buf[len] == '\n')
- || (bufline->buf[len] == '\0'))
- {
- len--;
- }
-
- bufline->buf[++len] = '\r';
- bufline->buf[++len] = '\n';
- bufline->buf[++len] = '\0';
- }
-
- bufline->len = len;
- bufhead->len += len;
-}
-
-/*
- * rb_linebuf_putprefix
- *
- * Similar to rb_linebuf_put, but designed for use by send.c.
- *
- * prefix is inserted first, then format/va_args is appended to the buffer.
- * prefix_buflen is the maximum size of the buffer that can be used so that the RFC1459 message is not too long
- */
-void
-rb_linebuf_putprefix(buf_head_t * bufhead, const char *format, va_list * va_args,
- const char *prefix, size_t prefix_buflen)
-{
- buf_line_t *bufline;
- int len = 0;
-
- /* make sure the previous line is terminated */
- if(bufhead->list.tail)
- {
- bufline = bufhead->list.tail->data;
- lrb_assert(bufline->terminated);
- }
+ ret = rb_fsnprint(bufline->buf, LINEBUF_SIZE + 1, strings);
+ if (ret > 0)
+ len += ret;
- /* Create a new line */
- bufline = rb_linebuf_new_line(bufhead);
-
- if(prefix != NULL)
- len = rb_strlcpy(bufline->buf, prefix, LINEBUF_DATA_SIZE + 1);
+ if (len > LINEBUF_SIZE)
+ len = LINEBUF_SIZE;
- if(va_args != NULL)
- {
- if (prefix_buflen > LINEBUF_DATA_SIZE + 1)
- prefix_buflen = LINEBUF_DATA_SIZE + 1;
- len += vsnprintf((bufline->buf + len), prefix_buflen - len, format, *va_args);
- }
+ /* add trailing CRLF */
+ bufline->buf[len++] = '\r';
+ bufline->buf[len++] = '\n';
+ bufline->buf[len] = '\0';
bufline->terminated = 1;
- /* Truncate the data if required */
- if(len > LINEBUF_DATA_SIZE)
- {
- len = LINEBUF_DATA_SIZE;
- bufline->buf[len++] = '\r';
- bufline->buf[len++] = '\n';
- }
- else if(len == 0)
- {
- bufline->buf[len++] = '\r';
- bufline->buf[len++] = '\n';
- bufline->buf[len] = '\0';
- }
- else
- {
- /* Chop trailing CRLF's .. */
- while((bufline->buf[len] == '\r') || (bufline->buf[len] == '\n')
- || (bufline->buf[len] == '\0'))
- {
- len--;
- }
-
- bufline->buf[++len] = '\r';
- bufline->buf[++len] = '\n';
- bufline->buf[++len] = '\0';
- }
-
bufline->len = len;
bufhead->len += len;
}
-void
-rb_linebuf_putbuf(buf_head_t * bufhead, const char *buffer)
-{
- buf_line_t *bufline;
- int len = 0;
-
- /* make sure the previous line is terminated */
- if(bufhead->list.tail)
- {
- bufline = bufhead->list.tail->data;
- lrb_assert(bufline->terminated);
- }
-
- /* Create a new line */
- bufline = rb_linebuf_new_line(bufhead);
-
- if(buffer != NULL)
- len = rb_strlcpy(bufline->buf, buffer, LINEBUF_DATA_SIZE + 1);
-
- bufline->terminated = 1;
-
- /* Truncate the data if required */
- if(len > LINEBUF_DATA_SIZE)
- {
- len = LINEBUF_DATA_SIZE;
- bufline->buf[len++] = '\r';
- bufline->buf[len++] = '\n';
- }
- else if(len == 0)
- {
- bufline->buf[len++] = '\r';
- bufline->buf[len++] = '\n';
- bufline->buf[len] = '\0';
- }
- else
- {
- /* Chop trailing CRLF's .. */
- while((bufline->buf[len] == '\r') || (bufline->buf[len] == '\n')
- || (bufline->buf[len] == '\0'))
- {
- len--;
- }
-
- bufline->buf[++len] = '\r';
- bufline->buf[++len] = '\n';
- bufline->buf[++len] = '\0';
- }
-
- bufline->len = len;
- bufhead->len += len;
-
-
-}
-
-void
-rb_linebuf_put(buf_head_t * bufhead, const char *format, ...)
-{
- buf_line_t *bufline;
- int len = 0;
- va_list args;
-
- /* make sure the previous line is terminated */
- if(bufhead->list.tail)
- {
- bufline = bufhead->list.tail->data;
- lrb_assert(bufline->terminated);
- }
-
- /* Create a new line */
- bufline = rb_linebuf_new_line(bufhead);
-
- if(format != NULL)
- {
- va_start(args, format);
- len = vsnprintf(bufline->buf, LINEBUF_DATA_SIZE + 1, format, args);
- va_end(args);
- }
-
- bufline->terminated = 1;
-
- /* Truncate the data if required */
- if(len > LINEBUF_DATA_SIZE)
- {
- len = LINEBUF_DATA_SIZE;
- bufline->buf[len++] = '\r';
- bufline->buf[len++] = '\n';
- }
- else if(len == 0)
- {
- bufline->buf[len++] = '\r';
- bufline->buf[len++] = '\n';
- bufline->buf[len] = '\0';
- }
- else
- {
- /* Chop trailing CRLF's .. */
- while((bufline->buf[len] == '\r') || (bufline->buf[len] == '\n')
- || (bufline->buf[len] == '\0'))
- {
- len--;
- }
-
- bufline->buf[++len] = '\r';
- bufline->buf[++len] = '\n';
- bufline->buf[++len] = '\0';
- }
-
- bufline->len = len;
- bufhead->len += len;
-}
-
-
-
/*
* rb_linebuf_flush
*