]> diplodocus.org Git - nmh/blobdiff - sbr/fmt_scan.c
Terminate last arg in proxy argv n popsbr.c:parse_proxy().
[nmh] / sbr / fmt_scan.c
index 759a81f9754e839d060d23940ca45079f9cb66bc..5732af910c73cd0ac39e113a805aeb4d64a06689 100644 (file)
@@ -1063,6 +1063,7 @@ fmt_scan (struct format *format, charstring_t scanlp, int width, int *dat,
 
        case FT_MYMBOX:
        case FT_GETMYMBOX:
+       case FT_GETMYADDR:
            /*
             * if there's no component, we say true.  Otherwise we
             * say "true" only if we can parse the address and it
@@ -1076,18 +1077,28 @@ fmt_scan (struct format *format, charstring_t scanlp, int width, int *dat,
                comp->c_mn = mn;
                if (ismymbox(mn)) {
                    comp->c_flags |= CF_TRUE;
-                   /* Set str for use with FT_GETMYMBOX.  It will be
-                      run through FT_LS_ADDR, which will strip off
-                      any pers name. */
-                    str = mn->m_text;
+                   /* Set str for use with FT_GETMYMBOX.  With
+                      FT_GETMYADDR, comp->c_mn will be run through
+                      FT_LS_ADDR, which will strip off any pers
+                      name. */
+                   str = mn->m_text;
                } else {
                    comp->c_flags &= ~CF_TRUE;
-                }
+               }
                while ((sp = getname(sp)))
                    if ((comp->c_flags & CF_TRUE) == 0 &&
                        (mn = getm (sp, NULL, 0, NULL, 0)))
-                       if (ismymbox(mn))
+                       if (ismymbox(mn)) {
                            comp->c_flags |= CF_TRUE;
+                           /* Set str and comp->c_text for use with
+                              FT_GETMYMBOX.  With FT_GETMYADDR,
+                              comp->c_mn will be run through
+                              FT_LS_ADDR, which will strip off any
+                              pers name. */
+                           free (comp->c_text);
+                           comp->c_text = str = strdup (mn->m_text);
+                           comp->c_mn = mn;
+                       }
                comp->c_flags |= CF_PARSED;
            } else {
                while (getname(""))             /* XXX */
@@ -1096,11 +1107,11 @@ fmt_scan (struct format *format, charstring_t scanlp, int width, int *dat,
                    comp->c_flags |= CF_TRUE;
                else {
                    comp->c_flags &= ~CF_TRUE;
-                }
+               }
                comp->c_mn = &fmt_mnull;
            }
            if ((comp->c_flags & CF_TRUE) == 0  &&
-               fmt->f_type == FT_GETMYMBOX) {
+               (fmt->f_type == FT_GETMYMBOX || fmt->f_type == FT_GETMYADDR)) {
                /* Fool FT_LS_ADDR into not producing an address. */
                comp->c_mn = &fmt_mnull; comp->c_text = NULL;
            }