*/
static int psftp_connect(char *userhost, char *user, int portnumber);
-static void do_sftp_init(void);
+static int do_sftp_init(void);
/* ----------------------------------------------------------------------
* sftp client state.
return cmd;
}
-static void do_sftp_init(void)
+static int do_sftp_init(void)
{
/*
* Do protocol initialisation.
if (!fxp_init()) {
fprintf(stderr,
"Fatal: unable to initialise SFTP: %s\n", fxp_error());
- return;
+ return 1; /* failure */
}
/*
printf("Remote working directory is %s\n", homedir);
}
pwd = dupstr(homedir);
+ return 0;
}
void do_sftp(int mode, int modeflags, char *batchfile)
strcat(str, "\n");
fputs(str, stderr);
- exit(1);
+ cleanup_exit(1);
}
void connection_fatal(char *fmt, ...)
{
strcat(str, "\n");
fputs(str, stderr);
- exit(1);
+ cleanup_exit(1);
}
void ldisc_send(char *buf, int len, int interactive)
unsigned char *p = (unsigned char *) data;
unsigned len = (unsigned) datalen;
+ assert(len > 0);
+
/*
* stderr data is just spouted to local stderr and otherwise
* ignored.
winsock_ver = MAKEWORD(1, 1);
if (WSAStartup(winsock_ver, &wsadata)) {
fprintf(stderr, "Unable to initialise WinSock");
- exit(1);
+ cleanup_exit(1);
}
if (LOBYTE(wsadata.wVersion) != 1 || HIBYTE(wsadata.wVersion) != 1) {
fprintf(stderr, "WinSock version is incompatible with 1.1");
- exit(1);
+ cleanup_exit(1);
}
}
printf(" -v show verbose messages\n");
printf(" -P port connect to specified port\n");
printf(" -pw passw login with specified password\n");
- exit(1);
+ cleanup_exit(1);
}
/*
printf("login as: ");
if (!fgets(cfg.username, sizeof(cfg.username), stdin)) {
fprintf(stderr, "psftp: aborting\n");
- exit(1);
+ cleanup_exit(1);
} else {
int len = strlen(cfg.username);
if (cfg.username[len - 1] == '\n')
if (userhost) {
if (psftp_connect(userhost, user, portnumber))
return 1;
- do_sftp_init();
+ if (do_sftp_init())
+ return 1;
} else {
printf("psftp: no hostname specified; use \"open host.name\""
" to connect\n");