/* v. 0.1 */ /* Split_INBOX: attempt to split a VM mailbox into separate messages */ /* Forked from RMAIL version, split_mailbox.c,v 1.3 2001/08/22 15:27:29 */ /* (C) 2001 FlaterCo, Inc. */ /* This program is considered part of aemail and is subject to aemail licensing terms. See http://www.flaterco.com/aemail/ */ #include #include #include #include #include #include #define bufsize 10000 FILE *newmsg (char *dest_dir) { static unsigned long serialnum = 0; size_t l; char msgfilename[bufsize]; FILE *fp; struct stat stat_struct; l = strlen(dest_dir); assert (l + 80 < bufsize); strcpy (msgfilename, dest_dir); if (msgfilename[l-1] != '/') msgfilename[l++] = '/'; do sprintf (msgfilename+l, "msg%lu", serialnum++); while (stat (msgfilename, &stat_struct) == 0); if (!(fp = fopen (msgfilename, "w"))) { perror (msgfilename); fprintf (stderr, "Aborting run\n"); exit (-1); } return fp; } int main (int argc, char **argv) { FILE *mbox, *msg=NULL; char inbuf[bufsize]; if (argc != 3) { fprintf (stderr, "Usage: split_INBOX INBOX-filename destination-directory\n"); exit (-1); } if (!(mbox = fopen (argv[1], "r"))) { perror (argv[1]); exit (-1); } while (fgets (inbuf, bufsize, mbox)) { if (!(strncmp (inbuf, "From ", 5))) { if (msg) fclose (msg); msg = newmsg (argv[2]); } fprintf (msg, "%s", inbuf); } fclose (mbox); exit (0); }