#include "stralloc.h"
#include "buffer.h"
#include "getln.h"
#include "timeoutio.h"
#include "ftplib.h"
#include "readwrite.h"
#include "str.h"
#include "error.h"
#include "case.h"
#include "ftpcopy.h"
MKTIMEOUTREAD(o_timeout)
int
ftp_read_list(int fd,stralloc *dir)
{
buffer io;
int lines=0;
char buf[BUFFER_INSIZE];
stralloc direntry=STRALLOC_INIT;
buffer_init(&io,(buffer_op)TIMEOUTREADFN(o_timeout),fd,buf,BUFFER_INSIZE);
dir->len=0;
while (1) {
int gotlf;
if (-1==getln(&io,&direntry,&gotlf,'\n')) {
int e;
error:
e=errno;
stralloc_free(&direntry);
errno=e;
return -1;
}
if (direntry.len==0)
break;
if (!gotlf) {
errno=error_proto;
goto error;
}
direntry.len--;
if (direntry.s[direntry.len-1]=='\r') direntry.len--;
direntry.s[direntry.len]=0;
if (case_starts(direntry.s,"total"))
continue;
if (!stralloc_catb(dir,direntry.s,direntry.len+1))
goto error;
lines++;
}
stralloc_free(&direntry);
return lines;
}
syntax highlighted by Code2HTML, v. 0.9.1