X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fdistsbr.c;h=a600b77b0666ad13da91f570d4a92c63bd5b62e7;hp=a9a52b10e99f9d0d8646de855837c2a9f4de15fb;hb=a8984c0e490cda653615bc0e1d4743ad8fe7a2a7;hpb=ca0b3e830b86700d9e5e31b1784de2bdcaf58fc5 diff --git a/uip/distsbr.c b/uip/distsbr.c index a9a52b1..a600b77 100644 --- a/uip/distsbr.c +++ b/uip/distsbr.c @@ -9,6 +9,9 @@ #include #include #include +#include +#include +#include static int hdrfd = NOTOK; static int txtfd = NOTOK; @@ -16,31 +19,36 @@ static int txtfd = NOTOK; /* ** static prototypes */ -static void ready_msg(char *); +static int ready_msg(char *); int distout(char *drft, char *msgnam, char *backup) { int state; - register unsigned char *dp; - register char *resent; + unsigned char *dp; + char *resent; char name[NAMESZ], buffer[BUFSIZ]; - register FILE *ifp, *ofp; + FILE *ifp, *ofp; strcpy(backup, m_mktemp(toabsdir(invo_name), NULL, NULL)); if (rename(drft, backup) == NOTOK) { - adios(backup, "unable to rename %s to",drft); + advise(backup, "unable to rename %s to",drft); + return NOTOK; } if (!(ifp = fopen(backup, "r"))) { - adios(backup, "unable to read"); + advise(backup, "unable to read"); + return NOTOK; } if (!(ofp = fopen(drft, "w"))) { - adios(drft, "unable to create temporary file"); + advise(drft, "unable to create temporary file"); + return NOTOK; } chmod(drft, m_gmprot()); - ready_msg(msgnam); + if (ready_msg(msgnam) != OK) { + return NOTOK; + } lseek(hdrfd, (off_t) 0, SEEK_SET); /* msgnam not accurate */ cpydata(hdrfd, fileno(ofp), msgnam, drft); @@ -51,7 +59,6 @@ distout(char *drft, char *msgnam, char *backup) ifp)) { case FLD: case FLDPLUS: - case FLDEOF: if (!uprf(name, "resent")) { advise(NULL, "Please re-edit draft to remove the ``%s'' header.", name); goto leave_bad; @@ -67,13 +74,9 @@ distout(char *drft, char *msgnam, char *backup) resent = add(buffer, resent); fputs(buffer, ofp); } - if (state == FLDEOF) { - goto process; - } break; case BODY: - case BODYEOF: for (dp = buffer; *dp; dp++) { if (!isspace(*dp)) { advise(NULL, "Please re-edit draft to consist of headers only."); @@ -92,12 +95,13 @@ leave_bad: ; fclose(ofp); unlink(drft); if (rename(backup, drft) == NOTOK) { - adios(drft, "unable to rename %s to", backup); + advise(drft, "unable to rename %s to", backup); } return NOTOK; default: - adios(NULL, "getfld() returned %d", state); + advise(NULL, "getfld() returned %d", state); + return NOTOK; } } @@ -110,11 +114,11 @@ process: ; fclose(ofp); unlink(drft); if (rename(backup, drft) == NOTOK) { - adios(drft, "unable to rename %s to", backup); + advise(drft, "unable to rename %s to", backup); } return NOTOK; } - free(resent); + mh_free0(&resent); if (txtfd != NOTOK) { lseek(txtfd, (off_t) 0, SEEK_SET); /* msgnam not accurate */ @@ -127,12 +131,12 @@ process: ; } -static void +static int ready_msg(char *msgnam) { int state, out; char name[NAMESZ], buffer[BUFSIZ], tmpfil[BUFSIZ]; - register FILE *ifp, *ofp; + FILE *ifp, *ofp; char *cp = NULL; if (hdrfd != NOTOK) { @@ -144,17 +148,20 @@ ready_msg(char *msgnam) txtfd = NOTOK; } if (!(ifp = fopen(msgnam, "r"))) { - adios(msgnam, "unable to open message"); + advise(msgnam, "unable to open message"); + return NOTOK; } cp = m_mktemp2(NULL, "dist", &hdrfd, NULL); if (!cp) { - adios("distsbr", "unable to create temporary file"); + advise("distsbr", "unable to create temporary file"); + return NOTOK; } fchmod(hdrfd, 0600); strncpy(tmpfil, cp, sizeof(tmpfil)); if ((out = dup(hdrfd)) == NOTOK || !(ofp = fdopen(out, "w"))) { - adios(NULL, "no file descriptors -- you lose big"); + advise(NULL, "no file descriptors -- you lose big"); + return NOTOK; } unlink(tmpfil); @@ -164,7 +171,6 @@ ready_msg(char *msgnam) switch (state) { case FLD: case FLDPLUS: - case FLDEOF: if (uprf(name, "resent")) { fprintf(ofp, "Prev-"); } @@ -174,24 +180,22 @@ ready_msg(char *msgnam) sizeof buffer, ifp); fputs(buffer, ofp); } - if (state == FLDEOF) { - goto process; - } break; case BODY: - case BODYEOF: fclose(ofp); cp = m_mktemp2(NULL, "dist", &txtfd, NULL); if (!cp) { - adios("distsbr", "unable to create temp file"); + advise("distsbr", "unable to create temp file"); + return NOTOK; } fchmod(txtfd, 0600); strncpy(tmpfil, cp, sizeof(tmpfil)); if ((out = dup(txtfd)) == NOTOK || !(ofp = fdopen(out, "w"))) { - adios(NULL, "no file descriptors -- you lose"); + advise(NULL, "no file descriptors -- you lose"); + return NOTOK; } unlink(tmpfil); fprintf(ofp, "\n%s", buffer); @@ -205,13 +209,16 @@ ready_msg(char *msgnam) case LENERR: case FMTERR: - adios(NULL, "format error in message %s", msgnam); + advise(NULL, "format error in message %s", msgnam); + return NOTOK; default: - adios(NULL, "getfld() returned %d", state); + advise(NULL, "getfld() returned %d", state); + return NOTOK; } } process: ; fclose(ifp); fclose(ofp); + return OK; }