* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*
- * $Id: linebuf.c 25038 2008-01-23 16:03:08Z androsyn $
+ * $Id: linebuf.c 25375 2008-05-16 15:19:51Z androsyn $
*/
#include <libratbox_config.h>
{
/* Check we're doing the partial buffer thing */
bufline = bufhead->list.tail->data;
- lrb_assert(!bufline->flushing);
/* just try, the worst it could do is *reject* us .. */
if(!raw)
cpylen = rb_linebuf_copy_line(bufhead, bufline, data, len);
bufline->terminated = 1;
/* Truncate the data if required */
- if(unlikely(len > 510))
+ if(rb_unlikely(len > 510))
{
len = 510;
bufline->buf[len++] = '\r';
bufline->buf[len++] = '\n';
}
- else if(unlikely(len == 0))
+ else if(rb_unlikely(len == 0))
{
bufline->buf[len++] = '\r';
bufline->buf[len++] = '\n';
/* Create a new line */
bufline = rb_linebuf_new_line(bufhead);
- if(unlikely(buffer != NULL))
+ if(rb_unlikely(buffer != NULL))
len = rb_strlcpy(bufline->buf, buffer, BUF_DATA_SIZE);
bufline->terminated = 1;
/* Truncate the data if required */
- if(unlikely(len > 510))
+ if(rb_unlikely(len > 510))
{
len = 510;
bufline->buf[len++] = '\r';
bufline->buf[len++] = '\n';
}
- else if(unlikely(len == 0))
+ else if(rb_unlikely(len == 0))
{
bufline->buf[len++] = '\r';
bufline->buf[len++] = '\n';
/* Create a new line */
bufline = rb_linebuf_new_line(bufhead);
- if(unlikely(format != NULL))
+ if(rb_unlikely(format != NULL))
{
va_start(args, format);
len = rb_vsnprintf(bufline->buf, BUF_DATA_SIZE, format, args);
bufline->terminated = 1;
/* Truncate the data if required */
- if(unlikely(len > 510))
+ if(rb_unlikely(len > 510))
{
len = 510;
bufline->buf[len++] = '\r';
bufline->buf[len++] = '\n';
}
- else if(unlikely(len == 0))
+ else if(rb_unlikely(len == 0))
{
bufline->buf[len++] = '\r';
bufline->buf[len++] = '\n';
}
- if(bufline->flushing)
- {
- vec[x].iov_base = bufline->buf + bufhead->writeofs;
- vec[x++].iov_len = bufline->len - bufhead->writeofs;
- ptr = ptr->next;
- }
+ vec[x].iov_base = bufline->buf + bufhead->writeofs;
+ vec[x++].iov_len = bufline->len - bufhead->writeofs;
+ ptr = ptr->next;
do
{
{
bufline = ptr->data;
- if(bufline->flushing)
- {
- if(xret >= bufline->len - bufhead->writeofs)
- {
- xret = xret - (bufline->len - bufhead->writeofs);
- ptr = ptr->next;
- rb_linebuf_done_line(bufhead, bufline, bufhead->list.head);
- continue;
- }
- }
- if(xret >= bufline->len)
+ if(xret >= bufline->len - bufhead->writeofs)
{
- xret = xret - bufline->len;
+ xret -= bufline->len - bufhead->writeofs;
ptr = ptr->next;
rb_linebuf_done_line(bufhead, bufline, bufhead->list.head);
+ bufhead->writeofs = 0;
}
else
{
- bufline->flushing = 1;
- bufhead->writeofs = xret;
+ bufhead->writeofs += xret;
break;
}
-
}
return retval;
return -1;
}
- /* Check we're flushing the first buffer */
- if(!bufline->flushing)
- {
- bufline->flushing = 1;
- bufhead->writeofs = 0;
- }
-
/* Now, try writing data */
retval = rb_write(F, bufline->buf + bufhead->writeofs, bufline->len - bufhead->writeofs);