diff options
-rw-r--r-- | mutt_socket.c | 32 | ||||
-rw-r--r-- | mutt_socket.h | 2 |
2 files changed, 34 insertions, 0 deletions
diff --git a/mutt_socket.c b/mutt_socket.c index 0566ab5b..bbe79c4b 100644 --- a/mutt_socket.c +++ b/mutt_socket.c @@ -232,6 +232,38 @@ int mutt_socket_readln_d (char* buf, size_t buflen, CONNECTION* conn, int dbg) return i + 1; } +int mutt_socket_buffer_readln_d (BUFFER *buf, CONNECTION *conn, int dbg) +{ + char ch; + int has_cr = 0; + + mutt_buffer_clear (buf); + + FOREVER + { + if (mutt_socket_readchar (conn, &ch) != 1) + return -1; + + if (ch == '\n') + break; + + if (has_cr) + { + mutt_buffer_addch (buf, '\r'); + has_cr = 0; + } + + if (ch == '\r') + has_cr = 1; + else + mutt_buffer_addch (buf, ch); + } + + dprint (dbg, (debugfile, "%d< %s\n", conn->fd, mutt_b2s (buf))); + + return 0; +} + CONNECTION* mutt_socket_head (void) { return Connections; diff --git a/mutt_socket.h b/mutt_socket.h index 236a8dd9..ab27bde4 100644 --- a/mutt_socket.h +++ b/mutt_socket.h @@ -67,6 +67,8 @@ int mutt_socket_has_buffered_input (CONNECTION *conn); void mutt_socket_clear_buffered_input (CONNECTION *conn); int mutt_socket_poll (CONNECTION* conn, time_t wait_secs); int mutt_socket_readchar (CONNECTION *conn, char *c); +#define mutt_socket_buffer_readln(A,B) mutt_socket_buffer_readln_d(A,B,MUTT_SOCK_LOG_CMD) +int mutt_socket_buffer_readln_d (BUFFER *buf, CONNECTION *conn, int dbg); #define mutt_socket_readln(A,B,C) mutt_socket_readln_d(A,B,C,MUTT_SOCK_LOG_CMD) int mutt_socket_readln_d (char *buf, size_t buflen, CONNECTION *conn, int dbg); #define mutt_socket_write(A,B) mutt_socket_write_d(A,B,-1,MUTT_SOCK_LOG_CMD) |