X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Frcvdist.c;h=62ae2a85cac3d070f9068a90f565e2d291bc3dfb;hp=89ed0299c37959254bf38b3d08486f20881ad1c8;hb=714b5c530ece27ea2835a313013f5b770163403c;hpb=a485ed478abbd599d8c9aab48934e7a26733ecb1 diff --git a/uip/rcvdist.c b/uip/rcvdist.c index 89ed029..62ae2a8 100644 --- a/uip/rcvdist.c +++ b/uip/rcvdist.c @@ -1,10 +1,10 @@ /* - * rcvdist.c -- asynchronously redistribute messages - * - * This code is Copyright (c) 2002, by the authors of nmh. See the - * COPYRIGHT file in the root directory of the nmh distribution for - * complete copyright information. - */ +** rcvdist.c -- asynchronously redistribute messages +** +** This code is Copyright (c) 2002, by the authors of nmh. See the +** COPYRIGHT file in the root directory of the nmh distribution for +** complete copyright information. +*/ #include #include @@ -28,14 +28,14 @@ static char drft[BUFSIZ] = ""; static char tmpfil[BUFSIZ] = ""; /* - * prototypes - */ -static void rcvdistout (FILE *, char *, char *); -static void unlink_done (int) NORETURN; +** prototypes +*/ +static void rcvdistout(FILE *, char *, char *); +static void unlink_done(int) NORETURN; int -main (int argc, char **argv) +main(int argc, char **argv) { pid_t child_id; int i, vecp = 1; @@ -49,85 +49,82 @@ main (int argc, char **argv) #ifdef LOCALE setlocale(LC_ALL, ""); #endif - invo_name = r1bindex (argv[0], '/'); + invo_name = r1bindex(argv[0], '/'); /* read user profile/context */ context_read(); - mts_init (invo_name); - arguments = getarguments (invo_name, argc, argv, 1); + mts_init(invo_name); + arguments = getarguments(invo_name, argc, argv, 1); argp = arguments; while ((cp = *argp++)) { if (*cp == '-') { - switch (smatch (++cp, switches)) { + switch (smatch(++cp, switches)) { case AMBIGSW: - ambigsw (cp, switches); - done (1); + ambigsw(cp, switches); + done(1); case UNKWNSW: vec[vecp++] = --cp; continue; case HELPSW: - snprintf (buf, sizeof(buf), - "%s [switches] [switches for postproc] address ...", - invo_name); - print_help (buf, switches, 1); - done (1); + snprintf(buf, sizeof(buf), "%s [switches] [switches for postproc] address ...", invo_name); + print_help(buf, switches, 1); + done(1); case VERSIONSW: print_version(invo_name); - done (1); + done(1); case FORMSW: if (!(form = *argp++) || *form == '-') - adios (NULL, "missing argument to %s", argp[-2]); + adios(NULL, "missing argument to %s", argp[-2]); continue; } } - addrs = addrs ? add (cp, add (", ", addrs)) : getcpy (cp); + addrs = addrs ? add(cp, add(", ", addrs)) : getcpy(cp); } if (addrs == NULL) - adios (NULL, "usage: %s [switches] [switches for postproc] address ...", - invo_name); + adios(NULL, "usage: %s [switches] [switches for postproc] address ...", invo_name); - umask (~m_gmprot ()); + umask(~m_gmprot()); tfile = m_mktemp2(NULL, invo_name, NULL, &fp); if (tfile == NULL) adios("rcvdist", "unable to create temporary file"); - strncpy (tmpfil, tfile, sizeof(tmpfil)); + strncpy(tmpfil, tfile, sizeof(tmpfil)); - cpydata (fileno (stdin), fileno (fp), "message", tmpfil); - fseek (fp, 0L, SEEK_SET); + cpydata(fileno(stdin), fileno(fp), "message", tmpfil); + fseek(fp, 0L, SEEK_SET); tfile = m_mktemp2(NULL, invo_name, NULL, NULL); if (tfile == NULL) adios("forw", "unable to create temporary file"); - strncpy (drft, tfile, sizeof(tmpfil)); + strncpy(drft, tfile, sizeof(tmpfil)); - rcvdistout (fp, form, addrs); - fclose (fp); + rcvdistout(fp, form, addrs); + fclose(fp); - if (distout (drft, tmpfil, backup) == NOTOK) - done (1); + if (distout(drft, tmpfil, backup) == NOTOK) + done(1); - vec[0] = r1bindex (postproc, '/'); + vec[0] = r1bindex(postproc, '/'); vec[vecp++] = "-dist"; vec[vecp++] = drft; vec[vecp] = NULL; for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++) - sleep (5); + sleep(5); switch (child_id) { case NOTOK: - admonish (NULL, "unable to fork");/* fall */ + admonish(NULL, "unable to fork");/* fall */ case OK: - execvp (postproc, vec); - fprintf (stderr, "unable to exec "); - perror (postproc); - _exit (1); + execvp(postproc, vec); + fprintf(stderr, "unable to exec "); + perror(postproc); + _exit(1); default: - done (pidXwait(child_id, postproc)); + done(pidXwait(child_id, postproc)); } return 0; /* dead code to satisfy the compiler */ @@ -165,7 +162,7 @@ static char *addrcomps[] = { static void -rcvdistout (FILE *inb, char *form, char *addrs) +rcvdistout(FILE *inb, char *form, char *addrs) { register int char_read = 0, format_len, i, state; register char *tmpbuf, **nxtbuf, **ap; @@ -173,63 +170,64 @@ rcvdistout (FILE *inb, char *form, char *addrs) register struct comp *cptr, **savecomp; FILE *out; - if (!(out = fopen (drft, "w"))) - adios (drft, "unable to create"); + if (!(out = fopen(drft, "w"))) + adios(drft, "unable to create"); /* get new format string */ - cp = new_fs (form ? form : rcvdistcomps, NULL, NULL); - format_len = strlen (cp); - ncomps = fmt_compile (cp, &fmt) + 1; - if (!(nxtbuf = compbuffers = (char **) calloc ((size_t) ncomps, sizeof(char *)))) - adios (NULL, "unable to allocate component buffers"); - if (!(savecomp = used_buf = (struct comp **) calloc ((size_t) (ncomps + 1), sizeof(struct comp *)))) - adios (NULL, "unable to allocate component buffer stack"); + cp = new_fs(form ? form : rcvdistcomps, NULL, NULL); + format_len = strlen(cp); + ncomps = fmt_compile(cp, &fmt) + 1; + if (!(nxtbuf = compbuffers = + (char **) calloc((size_t) ncomps, sizeof(char *)))) + adios(NULL, "unable to allocate component buffers"); + if (!(savecomp = used_buf = + (struct comp **) calloc((size_t) (ncomps + 1), + sizeof(struct comp *)))) + adios(NULL, "unable to allocate component buffer stack"); savecomp += ncomps + 1; *--savecomp = 0; for (i = ncomps; i--;) - *nxtbuf++ = mh_xmalloc (SBUFSIZ); + *nxtbuf++ = mh_xmalloc(SBUFSIZ); nxtbuf = compbuffers; tmpbuf = *nxtbuf++; for (ap = addrcomps; *ap; ap++) { - FINDCOMP (cptr, *ap); + FINDCOMP(cptr, *ap); if (cptr) cptr->c_type |= CT_ADDR; } - FINDCOMP (cptr, "addresses"); + FINDCOMP(cptr, "addresses"); if (cptr) cptr->c_text = addrs; for (state = FLD;;) { - switch (state = m_getfld (state, name, tmpbuf, SBUFSIZ, inb)) { + switch (state = m_getfld(state, name, tmpbuf, SBUFSIZ, inb)) { case FLD: case FLDPLUS: - if ((cptr = wantcomp[CHASH (name)])) + if ((cptr = wantcomp[CHASH(name)])) do { - if (!mh_strcasecmp (name, cptr->c_name)) { + if (!mh_strcasecmp(name, cptr->c_name)) { char_read += msg_count; if (!cptr->c_text) { cptr->c_text = tmpbuf; *--savecomp = cptr; tmpbuf = *nxtbuf++; } else { - i = strlen (cp = cptr->c_text) - 1; + i = strlen(cp = cptr->c_text) - 1; if (cp[i] == '\n') { if (cptr->c_type & CT_ADDR) { cp[i] = 0; - cp = add (",\n\t", cp); - } - else - cp = add ("\t", cp); + cp = add(",\n\t", cp); + } else + cp = add("\t", cp); } - cptr->c_text = add (tmpbuf, cp); + cptr->c_text = add(tmpbuf, cp); } while (state == FLDPLUS) { - state = m_getfld (state, name, tmpbuf, - SBUFSIZ, inb); - cptr->c_text = add (tmpbuf, cptr->c_text); + state = m_getfld(state, name, tmpbuf, SBUFSIZ, inb); + cptr->c_text = add(tmpbuf, cptr->c_text); char_read += msg_count; } break; @@ -237,7 +235,7 @@ rcvdistout (FILE *inb, char *form, char *addrs) } while ((cptr = cptr->c_next)); while (state == FLDPLUS) - state = m_getfld (state, name, tmpbuf, SBUFSIZ, inb); + state = m_getfld(state, name, tmpbuf, SBUFSIZ, inb); break; case LENERR: @@ -247,41 +245,42 @@ rcvdistout (FILE *inb, char *form, char *addrs) goto finished; default: - adios (NULL, "m_getfld() returned %d", state); + adios(NULL, "m_getfld() returned %d", state); } } finished: ; i = format_len + char_read + 256; - scanl = mh_xmalloc ((size_t) i + 2); + scanl = mh_xmalloc((size_t) i + 2); dat[0] = dat[1] = dat[2] = dat[4] = 0; dat[3] = outputlinelen; - fmt_scan (fmt, scanl, i, dat); - fputs (scanl, out); + fmt_scan(fmt, scanl, i, dat); + fputs(scanl, out); - if (ferror (out)) - adios (drft, "error writing"); - fclose (out); + if (ferror(out)) + adios(drft, "error writing"); + fclose(out); - free (scanl); - for (nxtbuf = compbuffers, i = ncomps; (cptr = *savecomp++); nxtbuf++, i--) - free (cptr->c_text); + free(scanl); + for (nxtbuf = compbuffers, i = ncomps; (cptr = *savecomp++); + nxtbuf++, i--) + free(cptr->c_text); while (i-- > 0) - free (*nxtbuf++); - free ((char *) compbuffers); - free ((char *) used_buf); + free(*nxtbuf++); + free((char *) compbuffers); + free((char *) used_buf); } static void -unlink_done (int status) +unlink_done(int status) { if (backup[0]) - unlink (backup); + unlink(backup); if (drft[0]) - unlink (drft); + unlink(drft); if (tmpfil[0]) - unlink (tmpfil); + unlink(tmpfil); - exit (status ? RCV_MBX : RCV_MOK); + exit(status ? RCV_MBX : RCV_MOK); }