#include #include "pn_parser.h" #include "pn_buffer.h" #include "pn_log.h" bool pn_buffer_read_line(struct pn_buffer *b, gchar **ret_str, gsize *ret_len) { bool more = true; gchar *cur, *next; gsize cur_len; cur = b->data + b->offset; next = g_strstr_len(cur, b->len - b->offset, "\r\n"); if (!next) { /* the line is incomplete */ goto missing; } cur_len = next - cur; if (ret_str) *ret_str = cur; if (ret_len) *ret_len = cur_len; b->offset += cur_len + 2; if (b->offset == b->len) { b->offset = b->len = 0; more = false; } return more; missing: if (ret_str) *ret_str = NULL; if (ret_len) *ret_len = 0; return false; }