diff options
author | Eric S. Raymond <esr@thyrsus.com> | 1996-12-06 22:24:57 +0000 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 1996-12-06 22:24:57 +0000 |
commit | 27533f3b4ef7b02b527991b8e733d5b5ba4cb836 (patch) | |
tree | dcc5453770ec9156bdac6d451f0f27db999695b4 | |
parent | 705fe30d960a34a9cfe2e8f1bd7f1cc4286ea139 (diff) | |
download | fetchmail-27533f3b4ef7b02b527991b8e733d5b5ba4cb836.tar.gz fetchmail-27533f3b4ef7b02b527991b8e733d5b5ba4cb836.tar.bz2 fetchmail-27533f3b4ef7b02b527991b8e733d5b5ba4cb836.zip |
Cleaner exit on error.
svn path=/trunk/; revision=609
-rw-r--r-- | driver.c | 47 |
1 files changed, 30 insertions, 17 deletions
@@ -405,7 +405,7 @@ struct query *ctl; /* query control record */ ok = strstr(ok, "for <"); else ok = (char *)NULL; - if (ok) + if (ok != 0) { char *sp, *tp; @@ -425,7 +425,7 @@ struct query *ctl; /* query control record */ *tp = '\0'; } - if (ok) + if (ok != 0) { received_for = alloca(strlen(rbuf)+1); strcpy(received_for, rbuf); @@ -849,31 +849,32 @@ const struct method *proto; /* protocol method table */ #ifdef KERBEROS_V4 if (ctl->authenticate == A_KERBEROS) { - ok = (kerberos_auth (fileno(sockfp), ctl->canonical_name)); - vtalarm(ctl->timeout); + ok = kerberos_auth(fileno(sockfp), ctl->canonical_name); if (ok != 0) goto cleanUp; + vtalarm(ctl->timeout); } #endif /* KERBEROS_V4 */ /* accept greeting message from mail server */ ok = (protocol->parse_response)(sockfp, buf); - vtalarm(ctl->timeout); if (ok != 0) goto cleanUp; + vtalarm(ctl->timeout); /* try to get authorized to fetch mail */ shroud = ctl->password; ok = (protocol->getauth)(sockfp, ctl, buf); - vtalarm(ctl->timeout); shroud = (char *)NULL; if (ok == PS_ERROR) ok = PS_AUTHFAIL; if (ok != 0) goto cleanUp; + vtalarm(ctl->timeout); /* compute number of messages and number of new messages waiting */ - if ((protocol->getrange)(sockfp, ctl, &count, &new) != 0) + ok = (protocol->getrange)(sockfp, ctl, &count, &new); + if (ok != 0) goto cleanUp; vtalarm(ctl->timeout); @@ -900,8 +901,10 @@ const struct method *proto; /* protocol method table */ { msgsizes = (int *)alloca(sizeof(int) * count); - if ((ok = (proto->getsizes)(sockfp, count, msgsizes)) != 0) - return(PS_ERROR); + ok = (proto->getsizes)(sockfp, count, msgsizes); + if (ok != 0) + goto cleanUp; + vtalarm(ctl->timeout); } @@ -910,7 +913,7 @@ const struct method *proto; /* protocol method table */ if (new == -1 || ctl->fetchall) new = count; ok = ((new > 0) ? PS_SUCCESS : PS_NOMAIL); - goto closeUp; + goto cleanUp; } else if (count > 0) { @@ -957,7 +960,9 @@ const struct method *proto; /* protocol method table */ else { /* request a message */ - (protocol->fetch)(sockfp, num, &len); + ok = (protocol->fetch)(sockfp, num, &len); + if (ok != 0) + goto cleanUp; vtalarm(ctl->timeout); if (outlevel > O_SILENT) @@ -976,13 +981,18 @@ const struct method *proto; /* protocol method table */ len, protocol->delimited, ctl); - vtalarm(ctl->timeout); if (ok != 0) goto cleanUp; + vtalarm(ctl->timeout); /* tell the server we got it OK and resynchronize */ if (protocol->trail) - (protocol->trail)(sockfp, ctl, num); + { + ok = (protocol->trail)(sockfp, ctl, num); + if (ok != 0) + goto cleanUp; + vtalarm(ctl->timeout); + } } /* @@ -1002,9 +1012,9 @@ const struct method *proto; /* protocol method table */ if (outlevel > O_SILENT) fprintf(stderr, " flushed\n"); ok = (protocol->delete)(sockfp, ctl, num); - vtalarm(ctl->timeout); if (ok != 0) goto cleanUp; + vtalarm(ctl->timeout); delete_str(&ctl->newsaved, num); } else if (outlevel > O_SILENT) @@ -1017,11 +1027,13 @@ const struct method *proto; /* protocol method table */ ok = gen_transact(sockfp, protocol->expunge_cmd); if (ok != 0) goto cleanUp; + vtalarm(ctl->timeout); } ok = gen_transact(sockfp, protocol->exit_cmd); if (ok == 0) ok = PS_SUCCESS; + vtalarm(0); fclose(sockfp); goto closeUp; } @@ -1029,16 +1041,17 @@ const struct method *proto; /* protocol method table */ ok = gen_transact(sockfp, protocol->exit_cmd); if (ok == 0) ok = PS_NOMAIL; + vtalarm(0); fclose(sockfp); goto closeUp; } cleanUp: + vtalarm(ctl->timeout); if (ok != 0 && ok != PS_SOCKET) - { gen_transact(sockfp, protocol->exit_cmd); - fclose(sockfp); - } + vtalarm(0); + fclose(sockfp); } switch (ok) |