# HG changeset patch # User asl # Date 1028707233 0 # Node ID 7fffb214536c4669614a8ce7adb23225e6797a16 # Parent 2fd40a752de4798d041bf1b6e5f18dcef101fadf * src/ftpclient.c: Send "quit" not "quit " to keep some servers happy. Also deal with multi line replies correctly. diff --git a/packages/net/ftpclient/current/ChangeLog b/packages/net/ftpclient/current/ChangeLog --- a/packages/net/ftpclient/current/ChangeLog +++ b/packages/net/ftpclient/current/ChangeLog @@ -1,3 +1,8 @@ +2002-08-06 Andrew Lunn + + * src/ftpclient.c: Send "quit" not "quit " to keep some servers + happy. Also deal with multi line replies correctly. + 2002-02-22 Hugo Tyson * doc/ftpclient.sgml: New file. Document it. diff --git a/packages/net/ftpclient/current/src/ftpclient.c b/packages/net/ftpclient/current/src/ftpclient.c --- a/packages/net/ftpclient/current/src/ftpclient.c +++ b/packages/net/ftpclient/current/src/ftpclient.c @@ -9,6 +9,7 @@ // ------------------------------------------- // This file is part of eCos, the Embedded Configurable Operating System. // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2002 Andrew Lunn. // // eCos is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free @@ -54,6 +55,7 @@ #include #include +#include #include #include #include @@ -128,7 +130,9 @@ get_reply(int s,ftp_printf_t ftp_printf) char buf[BUFSIZ]; int more = 0; int ret; - + int first_line=1; + int code=0; + do { if ((ret=get_line(s,buf,sizeof(buf),ftp_printf)) < 0) { @@ -137,7 +141,19 @@ get_reply(int s,ftp_printf_t ftp_printf) ftp_printf(0,"FTP: %s\n",buf); - more = (buf[3] == '-'); + if (first_line) { + code = strtoul(buf,NULL,0); + first_line=0; + more = (buf[3] == '-'); + } else { + if (isdigit(buf[0]) && isdigit(buf[1]) && isdigit(buf[2]) && + (code == strtoul(buf,NULL,0)) && + buf[3]==' ') { + more=0; + } else { + more =1; + } + } } while (more); return (buf[0] - '0'); @@ -461,7 +477,7 @@ static int quit(int s, int ret; - ret = command("QUIT","",s,msgbuf,msgbuflen,ftp_printf); + ret = command("QUIT",NULL,s,msgbuf,msgbuflen,ftp_printf); if (ret < 0) { return (ret); }