nmh-commits
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]