summaryrefslogtreecommitdiffstats
path: root/usr.bin/ncftp/cmds.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/ncftp/cmds.c')
-rw-r--r--usr.bin/ncftp/cmds.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/usr.bin/ncftp/cmds.c b/usr.bin/ncftp/cmds.c
index 0ff1055..c467c3b 100644
--- a/usr.bin/ncftp/cmds.c
+++ b/usr.bin/ncftp/cmds.c
@@ -594,6 +594,7 @@ int mget(int argc, char **argv)
char *cp;
longstring local;
Sig_t oldintr;
+ int errs;
if (argc < 2)
argv = re_makeargv("(remote-files) ", &argc);
@@ -604,7 +605,7 @@ int mget(int argc, char **argv)
activemcmd = 1;
oldintr = Signal(SIGINT, mabort);
(void) setjmp(jabort);
- while ((cp = remglob(argv)) != NULL) {
+ while ((cp = remglob(argv, &errs)) != NULL) {
if (*cp == '\0') {
activemcmd = 0;
continue;
@@ -621,19 +622,22 @@ int mget(int argc, char **argv)
}
(void) Signal(SIGINT,oldintr);
activemcmd = 0;
- return NOERR;
+ if (!errs)
+ return NOERR;
+ else
+ return CMDERR;
} /* mget */
-char *remglob(char *argv[])
+char *remglob(char *argv[], int *errs)
{
static FILE *ftemp = NULL;
int oldverbose, i;
char *cp, *mode;
static string tmpname, str;
- int result, errs;
+ int result;
if (!activemcmd) {
xx:
@@ -647,7 +651,7 @@ xx:
if (ftemp == NULL) {
(void) tmp_name(tmpname);
oldverbose = verbose, verbose = V_QUIET;
- errs = 0;
+ *errs = 0;
for (mode = "w", i=1; argv[i] != NULL; i++, mode = "a") {
result = recvrequest ("NLST", tmpname, argv[i], mode);
if (i == 1)
@@ -658,11 +662,11 @@ xx:
(strpbrk(argv[i], globchars) != NULL) ? "No match" :
"No such file"
);
- errs++;
+ ++(*errs);
}
}
verbose = oldverbose;
- if (errs == (i - 1)) {
+ if (*errs == (i - 1)) {
/* Every pattern was in error, so we can't try anything. */
(void) unlink(tmpname); /* Shouldn't be there anyway. */
return NULL;
@@ -876,6 +880,7 @@ int mdelete(int argc, char **argv)
char *cp;
Sig_t oldintr;
string str;
+ int errs;
if (argc < 2)
argv = re_makeargv("(remote-files) ", &argc);
@@ -886,7 +891,7 @@ int mdelete(int argc, char **argv)
activemcmd = 1;
oldintr = Signal(SIGINT, mabort);
(void) setjmp(jabort);
- while ((cp = remglob(argv)) != NULL) {
+ while ((cp = remglob(argv, &errs)) != NULL) {
if (*cp == '\0') {
activemcmd = 0;
continue;
@@ -903,7 +908,10 @@ int mdelete(int argc, char **argv)
}
(void) Signal(SIGINT, oldintr);
activemcmd = 0;
- return NOERR;
+ if (!errs)
+ return NOERR;
+ else
+ return CMDERR;
} /* mdelete */
@@ -1282,9 +1290,12 @@ int rmthelp(int argc, char **argv)
/*ARGSUSED*/
int quit(int argc, char **argv)
{
- close_up_shop();
+ int rc;
+
+ /* slightly kludge. argc == -1 means failure from some other caller */
+ rc = close_up_shop() || argc == -1;
trim_log();
- exit(0);
+ exit(rc);
} /* quit */
@@ -1331,19 +1342,22 @@ int disconnect(int argc, char **argv)
-void
+int
close_up_shop(void)
{
static int only_once = 0;
+ int rcode = 0;
+
if (only_once++ > 0)
return;
if (connected)
(void) disconnect(0, NULL);
- WriteRecentSitesFile();
+ rcode = WriteRecentSitesFile();
if (logf != NULL) {
(void) fclose(logf);
logf = NULL;
}
+ return rcode;
} /* close_up_shop */
OpenPOWER on IntegriCloud