diff options
Diffstat (limited to 'imap/src/osdep/nt/tcp_nt.c')
-rw-r--r-- | imap/src/osdep/nt/tcp_nt.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/imap/src/osdep/nt/tcp_nt.c b/imap/src/osdep/nt/tcp_nt.c index 7af6de7..3a836b1 100644 --- a/imap/src/osdep/nt/tcp_nt.c +++ b/imap/src/osdep/nt/tcp_nt.c @@ -926,3 +926,26 @@ void tcp_end(void) if(myServerAddr) fs_give((void **) &myServerAddr); if(myServerHost) fs_give((void **) &myServerHost); } + + +char *tcp_getsize (TCPSTREAM *stream, unsigned long size) +{ + char *ret = NIL; + unsigned long got = 0L, need = size, n; + int done = 0; + + while(!done){ + if(!tcp_getdata (stream)) return ret; /* return what we have */ + n = stream->ictr < need ? stream->ictr : need; + fs_resize((void **) &ret, got + n + 1); + memcpy(ret + got, stream->iptr, n); + ret[got+n] = '\0'; + got += n; + need -= n; + stream->iptr += n; + stream->ictr -= n; + if(need == 0L) done++; + } + + return ret; +} |