[MAIL_USE_POP]: Add the "-r" flag to reverse the

order of messages downloaded from a POP server (e.g., if the
server stores messages in mailboxes in reverse order).
This commit is contained in:
Karl Heuer 1998-09-04 20:14:16 +00:00
parent 2c79f5b831
commit a2997b0f43

View file

@ -197,11 +197,23 @@ main (argc, argv)
char *spool_name; char *spool_name;
#endif #endif
#ifdef MAIL_USE_POP
int pop_reverse_order = 0;
# define ARGSTR "pr"
#else /* ! MAIL_USE_POP */
# define ARGSTR "p"
#endif /* MAIL_USE_POP */
delete_lockname = 0; delete_lockname = 0;
while ((c = getopt (argc, argv, "p")) != EOF) while ((c = getopt (argc, argv, ARGSTR)) != EOF)
{ {
switch (c) { switch (c) {
#ifdef MAIL_USE_POP
case 'r':
pop_reverse_order = 1;
break;
#endif
case 'p': case 'p':
preserve_mail++; preserve_mail++;
break; break;
@ -263,7 +275,8 @@ main (argc, argv)
int status; int status;
status = popmail (inname + 3, outname, preserve_mail, status = popmail (inname + 3, outname, preserve_mail,
(argc - optind == 3) ? argv[optind+2] : NULL); (argc - optind == 3) ? argv[optind+2] : NULL,
pop_reverse_order);
exit (status); exit (status);
} }
@ -682,11 +695,12 @@ char ibuffer[BUFSIZ];
char obuffer[BUFSIZ]; char obuffer[BUFSIZ];
char Errmsg[80]; char Errmsg[80];
popmail (user, outfile, preserve, password) popmail (user, outfile, preserve, password, reverse_order)
char *user; char *user;
char *outfile; char *outfile;
int preserve; int preserve;
char *password; char *password;
int reverse_order;
{ {
int nmsgs, nbytes; int nmsgs, nbytes;
register int i; register int i;
@ -694,6 +708,7 @@ popmail (user, outfile, preserve, password)
FILE *mbf; FILE *mbf;
char *getenv (); char *getenv ();
popserver server; popserver server;
int start, end, increment;
server = pop_open (0, user, password, POP_NO_GETPASS); server = pop_open (0, user, password, POP_NO_GETPASS);
if (! server) if (! server)
@ -732,7 +747,20 @@ popmail (user, outfile, preserve, password)
return (1); return (1);
} }
for (i = 1; i <= nmsgs; i++) if (reverse_order)
{
start = nmsgs;
end = 1;
increment = -1;
}
else
{
start = 1;
end = nmsgs;
increment = 1;
}
for (i = start; i * increment <= end * increment; i += increment)
{ {
mbx_delimit_begin (mbf); mbx_delimit_begin (mbf);
if (pop_retr (server, i, mbf) != OK) if (pop_retr (server, i, mbf) != OK)