assert(rreq == req);
canonname = fxp_realpath_recv(pktin, rreq);
- if (!canonname)
- return fullname; /* even that failed; give up */
+ if (!canonname) {
+ /* Even that failed. Restore our best guess at the
+ * constructed filename and give up */
+ fullname[i] = '/'; /* restore slash and last component */
+ return fullname;
+ }
/*
* We have a canonical name for all but the last path
return 0;
}
- if (back != NULL && back->socket(backhandle) != NULL) {
+ if (back != NULL && back->connected(backhandle)) {
char ch;
back->special(backhandle, TS_EOF);
sftp_recvdata(&ch, 1);
}
while (outlen > 0) {
- if (ssh_sftp_loop_iteration() < 0)
+ if (back->exitcode(backhandle) >= 0 || ssh_sftp_loop_iteration() < 0)
return 0; /* doom */
}
do_sftp(mode, modeflags, batchfile);
- if (back != NULL && back->socket(backhandle) != NULL) {
+ if (back != NULL && back->connected(backhandle)) {
char ch;
back->special(backhandle, TS_EOF);
sftp_recvdata(&ch, 1);