{ NULL, 0 }
};
+char *version=VERSION;
#define NFILES 32
int
main(int argc, char **argv)
{
- int filep=0, naddrs=0, n;
+ int naddrs=0, n;
char *cp;
char buf[BUFSIZ], **argp;
- char **arguments, *files[NFILES];
+ char **arguments;
+ char *folder = NULL;
FILE *in;
+ struct msgs_array msgs = {0};
+ struct msgs_array files = {0};
+ size_t filep;
setlocale(LC_ALL, "");
invo_name = mhbasename(argv[0]);
continue;
}
}
- if (filep > NFILES) {
- adios(EX_USAGE, NULL, "too many files (more than %d)",
- NFILES);
+ if (*cp == '+' || *cp == '@') {
+ if (folder) {
+ adios(EX_USAGE, NULL, "only one folder at a time!");
+ } else {
+ folder = mh_xstrdup(expandfol(cp));
+ }
} else {
- files[filep++] = cp;
+ app_msgarg(&msgs, cp);
}
}
- files[filep] = NULL;
- if (!filep) {
+ if (!msgs.size) {
adios(EX_USAGE, NULL, "usage: %s [switches] file ...", invo_name);
}
if (!toccsw && !dccsw && !bccsw) {
adios(EX_USAGE, NULL, "use at least one of: -tocc -dcc -bcc");
}
- for (filep=0; files[filep]; filep++) {
- process(files[filep]);
+ if (parse_msgs(&msgs, folder, &files) < 0) {
+ exit(EX_IOERR);
+ }
+ for (filep = 0; filep < files.size; filep++) {
+ process(files.msgs[filep]);
}
cmd = add("ali -list", NULL);
}
pclose(in);
}
- free(cmd);
+ mh_free0(&cmd);
naddrs += n;
cmd = add("ali -list", NULL);
}
pclose(in);
}
- free(cmd);
+ mh_free0(&cmd);
naddrs += n;
cmd = add("ali -list", NULL);
}
pclose(in);
}
- free(cmd);
+ mh_free0(&cmd);
naddrs += n;
return naddrs ? 0 : 1;
static int
process(char *file)
{
- int state, compnum;
- char *cp = NULL;
- char buf[BUFSIZ], name[NAMESZ];
+ enum state state;
+ struct field f = {{0}};
+ int compnum;
FILE *in;
adios(EX_IOERR, file, "unable to open");
}
- for (compnum = 1, state = FLD;;) {
- switch (state = m_getfld(state, name, buf, sizeof(buf), in)) {
- case FLD:
- compnum++;
- proc_hdr(name, buf);
+ for (compnum=1, state=FLD2;; compnum++) {
+ switch (state = m_getfld2(state, &f, in)) {
+ case LENERR2:
+ state = FLD2;
+ /* FALL */
+ case FLD2:
+ proc_hdr(f.name, f.value);
continue;
- case FLDPLUS:
- compnum++;
- cp = getcpy(buf);
- while (state == FLDPLUS) {
- state = m_getfld(state, name, buf,
- sizeof(buf), in);
- cp = add(buf, cp);
- }
- proc_hdr(name, cp);
- free(cp);
- continue;
-
- case BODY:
- case FILEEOF:
+ case BODY2:
+ case FILEEOF2:
break;
- case LENERR:
- case FMTERR:
+ case FMTERR2:
+ advise(NULL, "message format error in component #%d", compnum);
+ continue;
+
+ case IOERR2:
adios(EX_DATAERR, NULL, "message format error in component #%d",
compnum);