diff --git a/src/ChangeLog b/src/ChangeLog index 094aa5ea..33e1cbe6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2003-09-17 Aurelien Marchand + + * ftp.h: Added OS400 system in enum + * ftp-basic.c: recognize OS400 systems + * ftp.c: don't prepend the CWD if talking to OS400, since it + breaks the change in library + 2003-09-18 Hrvoje Niksic * retr.c (get_contents): Pass the correct argument to ssl_iread. diff --git a/src/ftp-basic.c b/src/ftp-basic.c index 5ba09527..512b2b31 100644 --- a/src/ftp-basic.c +++ b/src/ftp-basic.c @@ -768,6 +768,8 @@ ftp_syst (struct rbuf *rbuf, enum stype *server_type) *server_type = ST_WINNT; else if (!strcasecmp (request, "MACOS")) *server_type = ST_MACOS; + else if (!strcasecmp (request, "OS/400")) + *server_type = ST_OS400; else *server_type = ST_OTHER; diff --git a/src/ftp.c b/src/ftp.c index 966b90b5..5c619be1 100644 --- a/src/ftp.c +++ b/src/ftp.c @@ -397,11 +397,19 @@ Error in server response, closing control connection.\n")); A relative directory is one that does not begin with '/' and, on non-Unix OS'es, one that doesn't begin with - ":". */ + "[a-z]:". + + This is not done for OS400, which doesn't use + "/"-delimited directories, nor does it support directory + hierarchies. "CWD foo" followed by "CWD bar" leaves us + in "bar", not in "foo/bar", as would be customary + elsewhere. */ if (target[0] != '/' && !(con->rs != ST_UNIX - && ISALPHA (target[0]) && target[1] == ':')) + && ISALPHA (target[0]) + && target[1] == ':') + && con->rs != ST_OS400) { int idlen = strlen (con->id); char *ntarget, *p; diff --git a/src/ftp.h b/src/ftp.h index ad49cc82..a5e73927 100644 --- a/src/ftp.h +++ b/src/ftp.h @@ -42,6 +42,7 @@ enum stype ST_VMS, ST_WINNT, ST_MACOS, + ST_OS400, ST_OTHER };