X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fpackf.c;h=fe1102c66338af9767b58f1bc127998eba2fcc62;hp=071cc3d00bfe6c5f1ad7f819cbdf8c36ce0cf0ca;hb=6e9577f324bef90765a5edc02044eb111ec48072;hpb=3916ab66ad5d183705ac12357621ea8661afd3c0 diff --git a/uip/packf.c b/uip/packf.c index 071cc3d..fe1102c 100644 --- a/uip/packf.c +++ b/uip/packf.c @@ -11,23 +11,19 @@ #include #include #include +#include +#include +#include static struct swit switches[] = { -#define FILESW 0 - { "file name", 0 }, -#define VERSIONSW 1 - { "version", 0 }, -#define HELPSW 2 +#define VERSIONSW 0 + { "Version", 0 }, +#define HELPSW 1 { "help", 0 }, { NULL, 0 } }; -static int md = NOTOK; - -static void mbxclose_done(int) NORETURN; - -char *file = NULL; - +char *version=VERSION; int main(int argc, char **argv) @@ -37,13 +33,8 @@ main(int argc, char **argv) char **argp, **arguments; struct msgs_array msgs = { 0, 0, NULL }; struct msgs *mp; - struct stat st; - done=mbxclose_done; - -#ifdef LOCALE setlocale(LC_ALL, ""); -#endif invo_name = mhbasename(argv[0]); /* read user profile/context */ @@ -60,52 +51,27 @@ main(int argc, char **argv) switch (smatch(++cp, switches)) { case AMBIGSW: ambigsw(cp, switches); - done(1); + exit(EX_USAGE); case UNKWNSW: - adios(NULL, "-%s unknown", cp); + adios(EX_USAGE, NULL, "-%s unknown", cp); case HELPSW: snprintf(buf, sizeof(buf), "%s [+folder] [msgs] [switches]", invo_name); print_help(buf, switches, 1); - done(1); + exit(argc == 2 ? EX_OK : EX_USAGE); case VERSIONSW: print_version(invo_name); - done(1); - - case FILESW: - if (file) - adios(NULL, "only one file at a time!"); - if (!(file = *argp++) || *file == '-') - adios(NULL, "missing argument to %s", - argp[-2]); - continue; + exit(argc == 2 ? EX_OK : EX_USAGE); } } if (*cp == '+' || *cp == '@') { if (folder) - adios(NULL, "only one folder at a time!"); - folder = getcpy(expandfol(cp)); + adios(EX_USAGE, NULL, "only one folder at a time!"); + folder = mh_xstrdup(expandfol(cp)); } else app_msgarg(&msgs, cp); } - if (!file) - file = "./msgbox"; - file = getcpy(expanddir(file)); - - /* - ** Check if file to be created (or appended to) - ** exists. If not, ask for confirmation. - */ - if (stat (file, &st) == NOTOK) { - if (errno != ENOENT) - adios(file, "error on file"); - cp = concat("Create file \"", file, "\"? ", NULL); - if (!getanswer(cp)) - done(1); - free(cp); - } - /* default is to pack whole folder */ if (!msgs.size) app_msgarg(&msgs, seq_all); @@ -115,59 +81,41 @@ main(int argc, char **argv) maildir = toabsdir(folder); if (chdir(maildir) == NOTOK) - adios(maildir, "unable to change directory to "); + adios(EX_OSERR, maildir, "unable to change directory to "); /* read folder and create message structure */ if (!(mp = folder_read(folder))) - adios(NULL, "unable to read folder %s", folder); + adios(EX_IOERR, NULL, "unable to read folder %s", folder); /* check for empty folder */ if (mp->nummsg == 0) - adios(NULL, "no messages in %s", folder); + adios(EX_DATAERR, NULL, "no messages in %s", folder); /* parse all the message ranges/sequences and set SELECTED */ for (msgnum = 0; msgnum < msgs.size; msgnum++) if (!m_convert(mp, msgs.msgs[msgnum])) - done(1); + exit(EX_USAGE); seq_setprev(mp); /* set the previous-sequence */ - /* open and lock new maildrop file */ - if ((md = mbx_open(file, getuid(), getgid(), m_gmprot())) - == NOTOK) - adios(file, "unable to open"); - - /* copy all the SELECTED messages to the file */ - for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) + /* copy all the SELECTED messages to stdout */ + for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) { if (is_selected(mp, msgnum)) { if ((fd = open(msgnam = m_name(msgnum), O_RDONLY)) == NOTOK) { admonish(msgnam, "unable to read message"); break; } - - if (mbx_copy(file, md, fd, NULL, 1) - == NOTOK) - adios(file, "error writing to file"); - + if (mbox_copy(fileno(stdout), fd) == NOTOK) { + adios(EX_IOERR, NULL, "error writing to stdout"); + } close(fd); } - - /* close and unlock maildrop file */ - mbx_close(file, md); - - context_replace(curfolder, folder); /* update current folder */ + } + context_replace(curfolder, folder); if (mp->hghsel != mp->curmsg) seq_setcur(mp, mp->lowsel); seq_save(mp); - context_save(); /* save the context file */ - folder_free(mp); /* free folder/message structure */ - done(0); - return 1; -} - -static void -mbxclose_done(int status) -{ - mbx_close(file, md); - exit(status); + context_save(); + folder_free(mp); + return 0; }