int htsp_tcp_read_line(socket_t fd, char *buf, const size_t bufsize, htsbuf_queue_t *spill) { int len; while(1) { len = htsbuf_find(spill, 0xa); if(len == -1) { if(tcp_fill_htsbuf_from_fd(fd, spill) < 0) return -1; continue; } if(len >= (int)bufsize - 1) return -1; htsbuf_read(spill, buf, len); buf[len] = 0; while(len > 0 && buf[len - 1] < 32) buf[--len] = 0; htsbuf_drop(spill, 1); /* Drop the \n */ return 0; } }
int tcp_read_line(tcp_stream_t *ts, char *buf, const size_t bufsize) { int len; while(1) { len = htsbuf_find(&ts->ts_spill, 0xa); if(len == -1) { if(tcp_fill_htsbuf_from_fd(ts, &ts->ts_spill) < 0) return -1; continue; } if(len >= bufsize - 1) return -1; htsbuf_read(&ts->ts_spill, buf, len); buf[len] = 0; while(len > 0 && buf[len - 1] < 32) buf[--len] = 0; htsbuf_drop(&ts->ts_spill, 1); /* Drop the \n */ return 0; } }
htsbuf_queue_t * tcp_read_buffered(tcp_stream_t *ts) { if(tcp_fill_htsbuf_from_fd(ts, &ts->ts_spill) < 0) { if(errno == EAGAIN) return &ts->ts_spill; return NULL; } return &ts->ts_spill; }
char * tcp_read_line(int fd, htsbuf_queue_t *spill) { int len; char *buf; do { len = htsbuf_find(spill, 0xa); if(len == -1) { if(tcp_fill_htsbuf_from_fd(fd, spill) < 0) return NULL; } } while (len == -1); buf = malloc(len+1); htsbuf_read(spill, buf, len); buf[len] = 0; while(len > 0 && buf[len - 1] < 32) buf[--len] = 0; htsbuf_drop(spill, 1); /* Drop the \n */ return buf; }