X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fdistsbr.c;h=2662c02dd9184c64d7f13f9f8b9271e415fb9b86;hp=21b42a5cf883c3b6e9f859ffc0e719ecba1f5879;hb=6e9577f324bef90765a5edc02044eb111ec48072;hpb=a87df3543d3bc128ba4079d1f95638476ba5ca50 diff --git a/uip/distsbr.c b/uip/distsbr.c index 21b42a5..2662c02 100644 --- a/uip/distsbr.c +++ b/uip/distsbr.c @@ -25,7 +25,7 @@ int distout(char *drft, char *msgnam, char *backup) { enum state state; - struct field f = free_field; + struct field f = {{0}}; unsigned char *dp; int resent = 0; FILE *ifp, *ofp; @@ -35,20 +35,23 @@ distout(char *drft, char *msgnam, char *backup) advise(backup, "unable to rename %s to",drft); return NOTOK; } + + if (ready_msg(msgnam) != OK) { + return NOTOK; + } + if (!(ifp = fopen(backup, "r"))) { advise(backup, "unable to read"); return NOTOK; } if (!(ofp = fopen(drft, "w"))) { + fclose(ifp); advise(drft, "unable to create temporary file"); return NOTOK; } chmod(drft, m_gmprot()); - if (ready_msg(msgnam) != OK) { - return NOTOK; - } lseek(hdrfd, (off_t) 0, SEEK_SET); /* msgnam not accurate */ cpydata(hdrfd, fileno(ofp), msgnam, drft); @@ -123,7 +126,7 @@ static int ready_msg(char *msgnam) { enum state state; - struct field f = free_field; + struct field f = {{0}}; char tmpfil[BUFSIZ]; int out; FILE *ifp, *ofp; @@ -144,12 +147,14 @@ ready_msg(char *msgnam) cp = m_mktemp2(NULL, "dist", &hdrfd, NULL); if (!cp) { + fclose(ifp); 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"))) { + fclose(ifp); advise(NULL, "no file descriptors -- you lose big"); return NOTOK; } @@ -182,10 +187,10 @@ ready_msg(char *msgnam) return NOTOK; } unlink(tmpfil); - fprintf(ofp, "\n%s", f.value); + fputs("\n", ofp); while (state == BODY2) { - state = m_getfld2(state, &f, ifp); fputs(f.value, ofp); + state = m_getfld2(state, &f, ifp); } /* FALL */