summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mutt_socket.c32
-rw-r--r--mutt_socket.h2
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)