From: Ben Harris Date: Thu, 25 Jun 2015 22:27:16 +0000 (+0100) Subject: When PSFTP exits in batch mode due to a command failure, set exit status != 0. X-Git-Tag: 0.65~1 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=95501a148ccbb0dd49a862d43ebfbac33560b3af;hp=--cc;p=PuTTY.git When PSFTP exits in batch mode due to a command failure, set exit status != 0. There are possibly other circumstances when PSFTP should also return failure, but that one seems particularly obvious. --- 95501a148ccbb0dd49a862d43ebfbac33560b3af diff --git a/psftp.c b/psftp.c index 1d331603..2a82ff8e 100644 --- a/psftp.c +++ b/psftp.c @@ -2388,7 +2388,7 @@ void do_sftp_cleanup() } } -void do_sftp(int mode, int modeflags, char *batchfile) +int do_sftp(int mode, int modeflags, char *batchfile) { FILE *fp; int ret; @@ -2421,8 +2421,9 @@ void do_sftp(int mode, int modeflags, char *batchfile) fp = fopen(batchfile, "r"); if (!fp) { printf("Fatal: unable to open %s\n", batchfile); - return; + return 1; } + ret = 0; while (1) { struct sftp_command *cmd; cmd = sftp_getcmd(fp, mode, modeflags); @@ -2437,8 +2438,13 @@ void do_sftp(int mode, int modeflags, char *batchfile) } } fclose(fp); - + /* + * In batch mode, and if exit on command failure is enabled, + * any command failure causes the whole of PSFTP to fail. + */ + if (ret == 0 && !(modeflags & 2)) return 2; } + return 0; } /* ---------------------------------------------------------------------- @@ -2894,7 +2900,7 @@ const int share_can_be_upstream = FALSE; */ int psftp_main(int argc, char *argv[]) { - int i; + int i, ret; int portnumber = 0; char *userhost, *user; int mode = 0; @@ -2990,7 +2996,7 @@ int psftp_main(int argc, char *argv[]) " to connect\n"); } - do_sftp(mode, modeflags, batchfile); + ret = do_sftp(mode, modeflags, batchfile); if (back != NULL && back->connected(backhandle)) { char ch; @@ -3004,5 +3010,5 @@ int psftp_main(int argc, char *argv[]) console_provide_logctx(NULL); sk_cleanup(); - return 0; + return ret; }