X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fdropsbr.c;h=cc668cdb7a3c4f95db3fd4c5072f14145af72c55;hb=5b792c4424571f05bc2008e3109797d18d7d00d1;hp=15cee8fb3d16abb9c8edb8852eaea7747b44b812;hpb=240013872c392fe644bd4f79382d9f5314b4ea60;p=mmh diff --git a/uip/dropsbr.c b/uip/dropsbr.c index 15cee8f..cc668cd 100644 --- a/uip/dropsbr.c +++ b/uip/dropsbr.c @@ -54,21 +54,21 @@ mbx_open(char *file, int mbx_style, uid_t uid, gid_t gid, mode_t mode) == NOTOK) { switch (errno) { #if defined(FCNTL_LOCKING) || defined(LOCKF_LOCKING) - case EACCES: - case EAGAIN: + case EACCES: + case EAGAIN: #endif #ifdef FLOCK_LOCKING - case EWOULDBLOCK: + case EWOULDBLOCK: #endif - case ETXTBSY: - j = errno; - sleep(5); - break; + case ETXTBSY: + j = errno; + sleep(5); + break; - default: - /* just return error */ - return NOTOK; + default: + /* just return error */ + return NOTOK; } } @@ -100,14 +100,14 @@ mbx_open(char *file, int mbx_style, uid_t uid, gid_t gid, mode_t mode) /* check the maildrop */ switch (mbx_style) { - case MMDF_FORMAT: - default: - status = mbx_chk_mmdf(fd); - break; + case MMDF_FORMAT: + default: + status = mbx_chk_mmdf(fd); + break; - case MBOX_FORMAT: - status = mbx_chk_mbox(fd); - break; + case MBOX_FORMAT: + status = mbx_chk_mbox(fd); + break; } /* if error, attempt to close it */ @@ -294,147 +294,151 @@ mbx_copy(char *mailbox, int mbx_style, int md, int fd, int mapping, size = 0; switch (mbx_style) { - case MMDF_FORMAT: - default: - j = strlen(mmdlm1); - if (write(md, mmdlm1, j) != j) - return NOTOK; - start = lseek(md, (off_t) 0, SEEK_CUR); - - if (text) { - i = strlen(text); - if (write(md, text, i) != i) - return NOTOK; - for (cp = text; *cp++; size++) - if (*cp == '\n') - size++; - } + case MMDF_FORMAT: + default: + j = strlen(mmdlm1); + if (write(md, mmdlm1, j) != j) + return NOTOK; + start = lseek(md, (off_t) 0, SEEK_CUR); - while ((i = read(fd, buffer, sizeof(buffer))) > 0) { - for (j = 0; (j = stringdex(mmdlm1, buffer)) >= 0; buffer[j]++) - continue; - for (j = 0; (j = stringdex(mmdlm2, buffer)) >= 0; buffer[j]++) - continue; - if (write(md, buffer, i) != i) - return NOTOK; - if (mapping) - for (cp = buffer; i-- > 0; size++) - if (*cp++ == '\n') - size++; - } + if (text) { + i = strlen(text); + if (write(md, text, i) != i) + return NOTOK; + for (cp = text; *cp++; size++) + if (*cp == '\n') + size++; + } - stop = lseek(md, (off_t) 0, SEEK_CUR); - j = strlen(mmdlm2); - if (write(md, mmdlm2, j) != j) + while ((i = read(fd, buffer, sizeof(buffer))) > 0) { + for (j = 0; (j = stringdex(mmdlm1, buffer)) >= 0; buffer[j]++) + continue; + for (j = 0; (j = stringdex(mmdlm2, buffer)) >= 0; buffer[j]++) + continue; + if (write(md, buffer, i) != i) return NOTOK; if (mapping) - map_write(mailbox, md, 0, (long) 0, start, - stop, pos, size, noisy); + for (cp = buffer; i-- > 0; size++) + if (*cp++ == '\n') + size++; + } - return (i != NOTOK ? OK : NOTOK); + stop = lseek(md, (off_t) 0, SEEK_CUR); + j = strlen(mmdlm2); + if (write(md, mmdlm2, j) != j) + return NOTOK; + if (mapping) + map_write(mailbox, md, 0, (long) 0, start, stop, pos, + size, noisy); - case MBOX_FORMAT: - if ((j = dup(fd)) == NOTOK) - return NOTOK; - if ((fp = fdopen(j, "r")) == NULL) { - close(j); - return NOTOK; - } - start = lseek(md, (off_t) 0, SEEK_CUR); + return (i != NOTOK ? OK : NOTOK); - /* If text is given, we add it to top of message */ - if (text) { - i = strlen(text); - if (write(md, text, i) != i) - return NOTOK; - for (cp = text; *cp++; size++) - if (*cp == '\n') - size++; - } + case MBOX_FORMAT: + if ((j = dup(fd)) == NOTOK) + return NOTOK; + if ((fp = fdopen(j, "r")) == NULL) { + close(j); + return NOTOK; + } + start = lseek(md, (off_t) 0, SEEK_CUR); - for (j = 0; fgets(buffer, sizeof(buffer), fp) != NULL; - j++) { + /* If text is given, we add it to top of message */ + if (text) { + i = strlen(text); + if (write(md, text, i) != i) + return NOTOK; + for (cp = text; *cp++; size++) + if (*cp == '\n') + size++; + } + for (j = 0; fgets(buffer, sizeof(buffer), fp) != NULL; j++) { + /* + ** Check the first line, and make some changes. + */ + if (j == 0 && !text) { /* - ** Check the first line, and make some changes. + ** Change the "Return-Path:" field + ** (if in first line) back to "From ". */ - if (j == 0 && !text) { + if (!strncmp(buffer, "Return-Path:", 12)) { + char tmpbuffer[BUFSIZ]; + char *tp, *ep, *fp; + + strncpy(tmpbuffer, buffer, + sizeof(tmpbuffer)); + ep = tmpbuffer + 13; + if (!(fp = strchr(ep + 1, ' '))) + fp = strchr(ep + 1, '\n'); + tp = dctime(dlocaltimenow()); + snprintf(buffer, sizeof(buffer), "From %.*s %s", (int)(fp - ep), ep, tp); + } else if (!strncmp(buffer, "X-Envelope-From:", + 16)) { /* - ** Change the "Return-Path:" field - ** (if in first line) back to "From ". + ** Change the "X-Envelope-From:" + ** field (if first line) back + ** to "From ". */ - if (!strncmp(buffer, "Return-Path:", - 12)) { - char tmpbuffer[BUFSIZ]; - char *tp, *ep, *fp; - - strncpy(tmpbuffer, buffer, sizeof(tmpbuffer)); - ep = tmpbuffer + 13; - if (!(fp = strchr(ep + 1, ' '))) - fp = strchr(ep + 1, '\n'); - tp = dctime(dlocaltimenow()); - snprintf(buffer, sizeof(buffer), "From %.*s %s", (int)(fp - ep), ep, tp); - } else if (!strncmp(buffer, "X-Envelope-From:", 16)) { - /* - ** Change the "X-Envelope-From:" - ** field (if first line) back - ** to "From ". - */ - char tmpbuffer[BUFSIZ]; - char *ep; - - strncpy(tmpbuffer, buffer, sizeof(tmpbuffer)); - ep = tmpbuffer + 17; - snprintf(buffer, sizeof(buffer), "From %s", ep); - } else if (strncmp(buffer, "From ", 5)) { - /* - ** If there is already a "From " - ** line, then leave it alone. - ** Else we add one. - */ - char tmpbuffer[BUFSIZ]; - char *tp, *ep; - - strncpy(tmpbuffer, buffer, sizeof(tmpbuffer)); - ep = "nobody@nowhere"; - tp = dctime(dlocaltimenow()); - snprintf(buffer, sizeof(buffer), "From %s %s%s", ep, tp, tmpbuffer); - } + char tmpbuffer[BUFSIZ]; + char *ep; + + strncpy(tmpbuffer, buffer, + sizeof(tmpbuffer)); + ep = tmpbuffer + 17; + snprintf(buffer, sizeof(buffer), + "From %s", ep); + } else if (strncmp(buffer, "From ", 5)) { + /* + ** If there is already a "From " + ** line, then leave it alone. + ** Else we add one. + */ + char tmpbuffer[BUFSIZ]; + char *tp, *ep; + + strncpy(tmpbuffer, buffer, + sizeof(tmpbuffer)); + ep = "nobody@nowhere"; + tp = dctime(dlocaltimenow()); + snprintf(buffer, sizeof(buffer), + "From %s %s%s", + ep, tp, tmpbuffer); } + } - /* - ** If this is not first line, and begins with - ** "From ", then prepend line with ">". - */ - if (j != 0 && strncmp(buffer, "From ", 5) == 0) { - write(md, ">", 1); - size++; - } - i = strlen(buffer); - if (write(md, buffer, i) != i) { - fclose(fp); - return NOTOK; - } - if (mapping) - for (cp = buffer; i-- > 0; size++) - if (*cp++ == '\n') - size++; + /* + ** If this is not first line, and begins with + ** "From ", then prepend line with ">". + */ + if (j != 0 && strncmp(buffer, "From ", 5) == 0) { + write(md, ">", 1); + size++; } - if (write(md, "\n", 1) != 1) { + i = strlen(buffer); + if (write(md, buffer, i) != i) { fclose(fp); return NOTOK; } if (mapping) - size += 2; - + for (cp = buffer; i-- > 0; size++) + if (*cp++ == '\n') + size++; + } + if (write(md, "\n", 1) != 1) { fclose(fp); - lseek(fd, (off_t) 0, SEEK_END); - stop = lseek(md, (off_t) 0, SEEK_CUR); - if (mapping) - map_write(mailbox, md, 0, (long) 0, start, - stop, pos, size, noisy); + return NOTOK; + } + if (mapping) + size += 2; + + fclose(fp); + lseek(fd, (off_t) 0, SEEK_END); + stop = lseek(md, (off_t) 0, SEEK_CUR); + if (mapping) + map_write(mailbox, md, 0, (long) 0, start, stop, pos, + size, noisy); - return OK; + return OK; } } @@ -591,35 +595,35 @@ map_write(char *mailbox, int md, int id, long last, off_t start, } switch (i = mbx_read(fp, 0, &rp, noisy)) { - case NOTOK: - fclose(fp); - mbx_close(file, fd); - return NOTOK; + case NOTOK: + fclose(fp); + mbx_close(file, fd); + return NOTOK; - case OK: - fclose(fp); - break; + case OK: + fclose(fp); + break; - default: - d1.d_id = 0; - for (dp = rp; i-- >0; dp++) { - if (dp->d_start == start) - dp->d_id = id; - lseek(fd, (off_t) (++d1.d_id * sizeof(*dp)), SEEK_SET); - if (write(fd, (char *) dp, sizeof(*dp)) != sizeof(*dp)) { - if (noisy) - admonish(file, "write error"); - mbx_close(file, fd); - fclose(fp); - return NOTOK; - } + default: + d1.d_id = 0; + for (dp = rp; i-- >0; dp++) { + if (dp->d_start == start) + dp->d_id = id; + lseek(fd, (off_t) (++d1.d_id * sizeof(*dp)), + SEEK_SET); + if (write(fd, (char *)dp, sizeof(*dp)) != sizeof(*dp)) { + if (noisy) + admonish(file, "write error"); + mbx_close(file, fd); + fclose(fp); + return NOTOK; } - free((char *) rp); - fclose(fp); - break; + } + free((char *) rp); + fclose(fp); + break; } - } - else { + } else { if (last == 0) last = d1.d_start; dp = &d2;