  int cmd = con->cmd;
  assert (con->target != NULL);
  con->dltime = 0;
    csock = RBUF_FD (&con->rbuf);
      char    *host = con->proxy ? con->proxy->host : u->host;
      int      port = con->proxy ? con->proxy->port : u->port;
      if (con->proxy)
	rbuf_initialize (&con->rbuf, csock);
	rbuf_uninitialize (&con->rbuf);
      rbuf_discard (&con->rbuf);
      err = ftp_login (&con->rbuf, logname, passwd);
      if (con->proxy)
	  rbuf_uninitialize (&con->rbuf);
	  rbuf_uninitialize (&con->rbuf);
	  rbuf_uninitialize (&con->rbuf);
	  rbuf_uninitialize (&con->rbuf);
	  rbuf_uninitialize (&con->rbuf);
      err = ftp_syst (&con->rbuf, &con->rs);
	  rbuf_uninitialize (&con->rbuf);
      err = ftp_pwd(&con->rbuf, &con->id);
	  rbuf_uninitialize (&con->rbuf);
	  FREE_MAYBE (con->id);
	  con->id = xstrdup ("/");
      if (con->rs == ST_VMS)
          char *path = strchr (con->id, '[');
	      char *idir = con->id;
	      DEBUGP (("  old = '%s'\n", con->id));
	      DEBUGP (("  new = '%s'\n\n", con->id));
      err = ftp_type (&con->rbuf, type_char);
	  rbuf_uninitialize (&con->rbuf);
	  rbuf_uninitialize (&con->rbuf);
	  rbuf_uninitialize (&con->rbuf);
	     (con->id) to it.  Absolute directories "just work".
	      && !(con->rs != ST_UNIX
	      && con->rs != ST_OS400)
	      int idlen = strlen (con->id);
	      /* Strip trailing slash(es) from con->id. */
	      while (idlen > 0 && con->id[idlen - 1] == '/')
	      memcpy (p, con->id, idlen);
		       con->id, target, ntarget));
	  if (con->rs == ST_VMS)
	  err = ftp_cwd (&con->rbuf, target);
	      rbuf_uninitialize (&con->rbuf);
	      rbuf_uninitialize (&con->rbuf);
	      rbuf_uninitialize (&con->rbuf);
      err = ftp_size(&con->rbuf, u->file, len);
	  rbuf_uninitialize (&con->rbuf);
	  err = ftp_pasv (&con->rbuf, &passive_addr, &passive_port);
	      rbuf_uninitialize (&con->rbuf);
	      rbuf_uninitialize (&con->rbuf);
		  rbuf_uninitialize (&con->rbuf);
	  err = ftp_port (&con->rbuf);
	      rbuf_uninitialize (&con->rbuf);
	      rbuf_uninitialize (&con->rbuf);
	      rbuf_uninitialize (&con->rbuf);
	      rbuf_uninitialize (&con->rbuf);
      err = ftp_rest (&con->rbuf, restval);
	  rbuf_uninitialize (&con->rbuf);
	  rbuf_uninitialize (&con->rbuf);
			 con->target);
	      rbuf_uninitialize (&con->rbuf);
	  rbuf_uninitialize (&con->rbuf);
      err = ftp_retr (&con->rbuf, u->file);
	  rbuf_uninitialize (&con->rbuf);
	  rbuf_uninitialize (&con->rbuf);
      err = ftp_list (&con->rbuf, NULL);
	  rbuf_uninitialize (&con->rbuf);
	  rbuf_uninitialize (&con->rbuf);
  if (!opt.dfp || con->cmd & DO_LIST)
      mkalldirs (con->target);
	rotate_backups (con->target);
      chmod (con->target, 0600);
      fp = fopen (con->target, restval ? "ab" : "wb");
	  logprintf (LOG_NOTQUIET, "%s: %s\n", con->target, strerror (errno));
	  rbuf_uninitialize (&con->rbuf);
  res = get_contents (dtsock, fp, len, restval, expected_bytes, &con->rbuf,
		      0, &con->dltime);
  tmrate = retr_rate (*len - restval, con->dltime, 0);
    if (!opt.dfp || con->cmd & DO_LIST)
		 con->target, strerror (errno));
      rbuf_uninitialize (&con->rbuf);
  err = ftp_response (&con->rbuf, &respline);
  rbuf_discard (&con->rbuf);
      rbuf_uninitialize (&con->rbuf);
      rbuf_uninitialize (&con->rbuf);
  if (opt.server_response && (con->cmd & DO_LIST))
      mkalldirs (con->target);
      fp = fopen (con->target, "r");
	logprintf (LOG_ALWAYS, "%s: %s\n", con->target, strerror (errno));
    } /* con->cmd & DO_LIST && server_response */
  if (!con->target)
    con->target = url_file_name (u);
  if (opt.noclobber && file_exists_p (con->target))
		 _("File `%s' already there, not retrieving.\n"), con->target);
  remove_link (con->target);
    locf = con->target;
  if (con->st & ON_YOUR_OWN)
    con->st = ON_YOUR_OWN;
  orig_lp = con->cmd & LEAVE_PENDING ? 1 : 0;
      if (con->st & ON_YOUR_OWN)
	  con->cmd = 0;
	  con->cmd |= (DO_RETR | LEAVE_PENDING);
	  if (rbuf_initialized_p (&con->rbuf))
	    con->cmd &= ~ (DO_LOGIN | DO_CWD);
	    con->cmd |= (DO_LOGIN | DO_CWD);
	  if (rbuf_initialized_p (&con->rbuf))
	    con->cmd &= ~DO_LOGIN;
	    con->cmd |= DO_LOGIN;
	  if (con->st & DONE_CWD)
	    con->cmd &= ~DO_CWD;
	    con->cmd |= DO_CWD;
	  && !(con->cmd & DO_LIST)
	con->cmd |= NO_TRUNCATE;
      if (!rbuf_initialized_p (&con->rbuf))
	con->st &= ~DONE_CWD;
	con->st |= DONE_CWD;
        tmrate = retr_rate (len - restval, con->dltime, 0);
      if (con->st & ON_YOUR_OWN)
	  CLOSE (RBUF_FD (&con->rbuf));
	  rbuf_uninitialize (&con->rbuf);
      if ((con->cmd & DO_LIST))
	con->cmd |= LEAVE_PENDING;
	con->cmd &= ~LEAVE_PENDING;
  if (rbuf_initialized_p (&con->rbuf) && (con->st & ON_YOUR_OWN))
      CLOSE (RBUF_FD (&con->rbuf));
      rbuf_uninitialize (&con->rbuf);
  char *old_target = con->target;
  con->st &= ~ON_YOUR_OWN;
  con->cmd |= (DO_LIST | LEAVE_PENDING);
  con->cmd &= ~DO_RETR;
  con->target = lf;
  con->target = old_target;
    *f = ftp_parse_ls (lf, con->rs);
  con->cmd &= ~DO_LIST;
  con->st &= ~ON_YOUR_OWN;
  if (!(con->st & DONE_CWD))
    con->cmd |= DO_CWD;
    con->cmd &= ~DO_CWD;
  con->cmd |= (DO_RETR | LEAVE_PENDING);
  if (!rbuf_initialized_p (&con->rbuf))
    con->cmd |= DO_LOGIN;
    con->cmd &= ~DO_LOGIN;
      old_target = con->target;
      con->target = url_file_name (u);
	  if (!stat (con->target, &st))
              cor_val = (con->rs == ST_UNIX || con->rs == ST_WINNT);
Remote file no newer than local file `%s' -- not retrieving.\n"), con->target);
                             con->target);
                  int rc = lstat (con->target, &st);
			  size_t n = readlink (con->target, link_target, len);
					 con->target, f->linkto);
			     con->target, f->linkto);
		  unlink (con->target);
		  if (symlink (f->linkto, con->target) == -1)
			 con->target);
	  && file_exists_p (con->target))
	    fl = con->target;
	logprintf (LOG_NOTQUIET, _("%s: corrupt time-stamp.\n"), con->target);
	chmod (con->target, f->perms);
	DEBUGP (("Unrecognized permissions for %s.\n", con->target));
      xfree (con->target);
      con->target = old_target;
      con->cmd &= ~ (DO_CWD | DO_LOGIN);
      con->st &= ~DONE_CWD;
  con->cmd |= LEAVE_PENDING;
	      logprintf (LOG_NOTQUIET, "%s: %s\n", con->target,
	  con->st |= ON_YOUR_OWN;
