[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Nmh-commits] [SCM] The nmh Mail Handling System branch, master, updated
From: |
Ken Hornstein |
Subject: |
[Nmh-commits] [SCM] The nmh Mail Handling System branch, master, updated. e1478073a486f07aa346772de0d48bec3a29536b |
Date: |
Sat, 24 Mar 2012 06:16:30 +0000 |
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "The nmh Mail Handling System".
The branch, master has been updated
via e1478073a486f07aa346772de0d48bec3a29536b (commit)
via 28183a4aa1c5615f943285df6301ed5f84bc6138 (commit)
via 59b086daa57105e8fbd8b1e6ba60be6a845faf95 (commit)
from 87e2eacc63f1ecc60d58a01921cdcf8b1aa55171 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.savannah.gnu.org/cgit/nmh.git/commit/?id=e1478073a486f07aa346772de0d48bec3a29536b
commit e1478073a486f07aa346772de0d48bec3a29536b
Author: Ken Hornstein <address@hidden>
Date: Sat Mar 24 02:15:49 2012 -0400
Add this support for setting the CT_ADDR flag.
diff --git a/uip/forwsbr.c b/uip/forwsbr.c
index 20879ec..79dfd10 100755
--- a/uip/forwsbr.c
+++ b/uip/forwsbr.c
@@ -21,6 +21,26 @@
static char msgbuf[256];
#define COMPFREE(c) if (c->c_text) free(c->c_text)
+/*
+ * A list of components we treat as addresses
+ */
+
+static char *addrcomps[] = {
+ "from",
+ "sender",
+ "reply-to",
+ "to",
+ "cc",
+ "bcc",
+ "resent-from",
+ "resent-sender",
+ "resent-reply-to",
+ "resent-to",
+ "resent-cc",
+ "resent-bcc",
+ NULL
+};
+
int
build_form (char *form, char *digest, int *dat, char *from, char *to,
char *cc, char *fcc, char *subject, char *inputfile)
@@ -29,7 +49,7 @@ build_form (char *form, char *digest, int *dat, char *from,
char *to,
int fmtsize, state, char_read = 0;
unsigned i;
register char *nfs;
- char *line, tmpfil[BUFSIZ], name[NAMESZ];
+ char *line, tmpfil[BUFSIZ], name[NAMESZ], **ap;
FILE *tmp;
register struct comp *cptr;
struct format *fmt;
@@ -50,6 +70,16 @@ build_form (char *form, char *digest, int *dat, char *from,
char *to,
(void) fmt_compile (nfs, &fmt);
/*
+ * Mark any components tagged as address components
+ */
+
+ for (ap = addrcomps; *ap; ap++) {
+ FINDCOMP (cptr, *ap);
+ if (cptr)
+ cptr->c_type |= CT_ADDR;
+ }
+
+ /*
* Process our message and save all relevant components
*
* A lot of this is taken from replsbr.c; should we try to merge
@@ -71,9 +101,7 @@ build_form (char *form, char *digest, int *dat, char *from,
char *to,
if (mh_strcasecmp(name, cptr->c_name) == 0) {
char_read += msg_count;
if (! cptr->c_text) {
- i = strlen(cptr->c_text = strdup(msgbuf)) - 1;
- if (cptr->c_text[i] == '\n')
- cptr->c_text[i] = '\0';
+ cptr->c_text = strdup(msgbuf);
} else {
i = strlen(cptr->c_text) - 1;
if (cptr->c_text[i] == '\n') {
http://git.savannah.gnu.org/cgit/nmh.git/commit/?id=28183a4aa1c5615f943285df6301ed5f84bc6138
commit 28183a4aa1c5615f943285df6301ed5f84bc6138
Author: Ken Hornstein <address@hidden>
Date: Sat Mar 24 02:08:03 2012 -0400
Sigh. Turns out last change broke a few tests, because it trimmed the
newline on the "body" component. Ignore that and the text component as
well for trimming. Also create some tests for the repl changes.
diff --git a/Makefile.am b/Makefile.am
index c8006a9..057e37a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -63,7 +63,9 @@ TESTS = test/bad-input/test-header \
test/post/test-post-multifrom test/post/test-post-envelope \
test/post/test-post-group \
test/refile/test-refile \
- test/repl/test-if-str test/scan/test-scan \
+ test/repl/test-if-str test/repl/test-trailing-newline \
+ test/repl/test-multicomp \
+ test/scan/test-scan \
test/sequences/test-flist test/sequences/test-mark \
test/whatnow/test-attach-detach test/whatnow/test-cd \
test/whatnow/test-ls test/whom/test-whom \
diff --git a/sbr/fmt_scan.c b/sbr/fmt_scan.c
index b194235..5e4bc88 100644
--- a/sbr/fmt_scan.c
+++ b/sbr/fmt_scan.c
@@ -318,14 +318,20 @@ fmt_scan (struct format *format, char *scanl, int width,
int *dat)
case FT_LS_COMP:
case FT_LS_DECODECOMP:
/*
- * Trim these components of any newlines
+ * Trim these components of any newlines.
+ *
+ * But don't trim the "body" and "text" components.
*/
- if (! (fmt->f_comp->c_flags & CF_TRIMMED) &&
- fmt->f_comp->c_text) {
- int i = strlen(fmt->f_comp->c_text);
- if (fmt->f_comp->c_text[i - 1] == '\n')
- fmt->f_comp->c_text[i - 1] = '\0';
- fmt->f_comp->c_flags |= CF_TRIMMED;
+
+ comp = fmt->f_comp;
+
+ if (! (comp->c_flags & CF_TRIMMED) && comp->c_text) {
+ i = strlen(comp->c_text);
+ if (comp->c_text[i - 1] == '\n' &&
+ strcmp(comp->c_name, "body") != 0 &&
+ strcmp(comp->c_name, "text") != 0)
+ comp->c_text[i - 1] = '\0';
+ comp->c_flags |= CF_TRIMMED;
}
break;
}
diff --git a/test/repl/test-multicomp b/test/repl/test-multicomp
new file mode 100755
index 0000000..ed5f97d
--- /dev/null
+++ b/test/repl/test-multicomp
@@ -0,0 +1,62 @@
+#!/bin/sh
+#
+# See if we handle multiple components of the same name correctly.
+#
+
+set -e
+
+if test -z "${MH_OBJ_DIR}"; then
+ srcdir=`dirname "$0"`/../..
+ MH_OBJ_DIR=`cd "$srcdir" && pwd`; export MH_OBJ_DIR
+fi
+
+. "$MH_OBJ_DIR/test/common.sh"
+
+setup_test
+
+# create test replcomps
+form="$MH_TEST_DIR/$$.replcomps"
+cat > "$form" <<EOF
+From: Nowhere User <address@hidden>
+%(lit)%(formataddr %<{reply-to}%?{from}%>)\
+%<(nonnull)%(void(width))%(putaddr To: )\n%>\
+%(lit)%(formataddr{cc})\
+%<(nonnull)%(void(width))%(putaddr cc: )\n%>\
+%<{subject}Subject: Re: %{subject}\n%>\
+--------
+EOF
+
+cat > "${MH_TEST_DIR}/Mail/inbox/11" <<EOF
+From: Test1 <address@hidden>
+To: Nowhere User <address@hidden>
+cc: Mister User One <address@hidden>
+Subject: This is a subject
+cc: Mister User Two <address@hidden>
+Subject: that got continued on another line
+Date: 28 Sep 2006 03:04:05 -0400
+
+This is a new test message
+EOF
+
+expected="$MH_TEST_DIR/$$.expected"
+actual="$MH_TEST_DIR/Mail/draft"
+
+cat > "$expected" <<EOF
+From: Nowhere User <address@hidden>
+To: Test1 <address@hidden>
+cc: Mister User One <address@hidden>,
+ Mister User Two <address@hidden>
+Subject: Re: This is a subject that got continued on another line
+--------
+Test1 writes:
+> This is a new test message
+EOF
+
+repl -editor true -cc cc -format -form $form -width 72 -nowhatnowproc 11 \
+ || exit 1
+
+check "$expected" "$actual"
+
+test ${failed:-0} -eq 0 && rm "$form"
+
+exit $failed
diff --git a/test/repl/test-trailing-newline b/test/repl/test-trailing-newline
new file mode 100755
index 0000000..20d7637
--- /dev/null
+++ b/test/repl/test-trailing-newline
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+# Test to make sure repl doesn't put trailing spaces at the end of components
+# (like subject)
+#
+
+set -e
+
+if test -z "${MH_OBJ_DIR}"; then
+ srcdir=`dirname "$0"`/../..
+ MH_OBJ_DIR=`cd "$srcdir" && pwd`; export MH_OBJ_DIR
+fi
+
+. "$MH_OBJ_DIR/test/common.sh"
+
+setup_test
+
+# create test replcomps
+form="$MH_TEST_DIR/$$.replcomps"
+cat > "$form" <<EOF
+From: Nowhere User <address@hidden>
+%(lit)%(formataddr %<{reply-to}%?{from}%>)\
+%<(nonnull)%(void(width))%(putaddr To: )\n%>\
+%<{subject}Subject: Re: %{subject}\n%>\
+--------
+EOF
+
+expected="$MH_TEST_DIR/$$.expected"
+actual="$MH_TEST_DIR/Mail/draft"
+
+cat > "$expected" <<EOF
+From: Nowhere User <address@hidden>
+To: Test1 <address@hidden>
+Subject: Re: Testing message 1
+--------
+Test1 writes:
+> This is message number 1
+EOF
+
+repl -editor true -format -form $form -nowhatnowproc 1 || exit 1
+
+check "$expected" "$actual"
+
+test ${failed:-0} -eq 0 && rm "$form"
+
+exit $failed
http://git.savannah.gnu.org/cgit/nmh.git/commit/?id=59b086daa57105e8fbd8b1e6ba60be6a845faf95
commit 59b086daa57105e8fbd8b1e6ba60be6a845faf95
Author: Ken Hornstein <address@hidden>
Date: Sat Mar 24 01:16:42 2012 -0400
Revert commit 255d4c646c0d7aa6b049052fef47fa083b1b1506 and solve
the problem another way.
The component parser needs to save the newlines so it can combine
multiple headers properly. So for us, strip out any trailing newlines
when we call fmt_scan().
diff --git a/h/fmt_scan.h b/h/fmt_scan.h
index dbe955f..ed4e2f0 100644
--- a/h/fmt_scan.h
+++ b/h/fmt_scan.h
@@ -39,6 +39,7 @@ struct comp {
#define CF_TRUE (1<<0) /* usually means component is present */
#define CF_PARSED (1<<1) /* address/date has been parsed */
#define CF_DATEFAB (1<<2) /* datefield fabricated */
+#define CF_TRIMMED (1<<3) /* Component has been trimmed */
extern int fmt_norm;
diff --git a/sbr/fmt_scan.c b/sbr/fmt_scan.c
index 29b87d0..b194235 100644
--- a/sbr/fmt_scan.c
+++ b/sbr/fmt_scan.c
@@ -313,6 +313,21 @@ fmt_scan (struct format *format, char *scanl, int width,
int *dat)
case FT_PARSEDATE:
fmt->f_comp->c_flags &= ~CF_PARSED;
break;
+ case FT_COMP:
+ case FT_COMPF:
+ case FT_LS_COMP:
+ case FT_LS_DECODECOMP:
+ /*
+ * Trim these components of any newlines
+ */
+ if (! (fmt->f_comp->c_flags & CF_TRIMMED) &&
+ fmt->f_comp->c_text) {
+ int i = strlen(fmt->f_comp->c_text);
+ if (fmt->f_comp->c_text[i - 1] == '\n')
+ fmt->f_comp->c_text[i - 1] = '\0';
+ fmt->f_comp->c_flags |= CF_TRIMMED;
+ }
+ break;
}
fmt = format;
diff --git a/uip/fmtdump.c b/uip/fmtdump.c
index 6566317..26a6e58 100644
--- a/uip/fmtdump.c
+++ b/uip/fmtdump.c
@@ -470,13 +470,14 @@ c_flagsstr(int t)
static char buf[64];
buf[0] = '\0';
- if (t & ~(CF_TRUE|CF_PARSED|CF_DATEFAB))
+ if (t & ~(CF_TRUE|CF_PARSED|CF_DATEFAB|CF_TRIMMED))
printf(buf, "0x%x ", t);
strcat(buf, "<");
i = 0;
FNORD(CF_TRUE, "TRUE");
FNORD(CF_PARSED, "PARSED");
FNORD(CF_DATEFAB, "DATEFAB");
+ FNORD(CF_TRIMMED, "TRIMMED");
strcat(buf, ">");
return(buf);
}
diff --git a/uip/replsbr.c b/uip/replsbr.c
index e2f63c5..613b3d9 100644
--- a/uip/replsbr.c
+++ b/uip/replsbr.c
@@ -164,9 +164,7 @@ replout (FILE *inb, char *msg, char *drft, struct msgs *mp,
int outputlinelen,
if (!mh_strcasecmp(name, cptr->c_name)) {
char_read += msg_count;
if (! cptr->c_text) {
- i = strlen(cptr->c_text = tmpbuf) - 1;
- if (tmpbuf[i] == '\n')
- tmpbuf[i] = '\0';
+ cptr->c_text = tmpbuf;
*--savecomp = cptr;
tmpbuf = *nxtbuf++;
} else {
-----------------------------------------------------------------------
Summary of changes:
Makefile.am | 4 ++-
h/fmt_scan.h | 1 +
sbr/fmt_scan.c | 21 +++++++++++++
test/repl/test-multicomp | 62 +++++++++++++++++++++++++++++++++++++++
test/repl/test-trailing-newline | 46 +++++++++++++++++++++++++++++
uip/fmtdump.c | 3 +-
uip/forwsbr.c | 36 ++++++++++++++++++++--
uip/replsbr.c | 4 +--
8 files changed, 168 insertions(+), 9 deletions(-)
create mode 100755 test/repl/test-multicomp
create mode 100755 test/repl/test-trailing-newline
hooks/post-receive
--
The nmh Mail Handling System
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Nmh-commits] [SCM] The nmh Mail Handling System branch, master, updated. e1478073a486f07aa346772de0d48bec3a29536b,
Ken Hornstein <=