bug-mailutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bug-mailutils] "=" in address parsed wrong


From: Sergey Poznyakoff
Subject: Re: [bug-mailutils] "=" in address parsed wrong
Date: Thu, 19 Mar 2009 23:47:53 +0200

address@hidden ha escrit:

> $ mail -V
> mail (GNU Mailutils 2.0)

Attached is a patch.

Regards,
Sergey

diff --git a/mail/set.c b/mail/set.c
index 5c5c256..78c0b48 100644
--- a/mail/set.c
+++ b/mail/set.c
@@ -40,25 +40,24 @@ mail_set (int argc, char **argv)
 
       for (i = 1; i < argc; i++)
        {
-         if (!strncmp ("no", argv[i], 2))
+         char *value = strchr (argv[i], '=');
+         if (value)
+           *value++ = 0;
+         
+         if (!strncmp ("no", argv[i], 2) && !value)
            {
              util_setenv (&argv[i][2], NULL, Mail_env_boolean, 1);
            }
-         else if (i+1 < argc && argv[i+1][0] == '=')
+         else if (value)
            {
              int nval;
-             char *name = argv[i];
              char *p;
              
-             i += 2;
-             if (i >= argc)
-               break;
-
-             nval = strtoul (argv[i], &p, 0);
+             nval = strtoul (value, &p, 0);
              if (*p == 0)
-               util_setenv (name, &nval, Mail_env_number, 1);
+               util_setenv (argv[i], &nval, Mail_env_number, 1);
              else
-               util_setenv (name, argv[i], Mail_env_string, 1);
+               util_setenv (argv[i], value, Mail_env_string, 1);
            }
          else
            {
diff --git a/mail/setenv.c b/mail/setenv.c
index d3ac45d..624fb13 100644
--- a/mail/setenv.c
+++ b/mail/setenv.c
@@ -39,21 +39,12 @@ mail_setenv (int argc, char **argv)
       /* Note: POSIX requires that the argument to putenv become part
         of the environment itself, hence the memory allocation. */
 
-      for (i = 1; i < argc;)
+      for (i = 1; i < argc; i++)
        {
-         char *p;
-         
-         if (i+1 < argc && argv[i+1][0] == '=')
-           {
-             asprintf (&p, "%s=%s", argv[i], argv[i+2]);
-             i += 3;
-           }
-         else
-           {
-             p = argv[i];
-             i++;
-           }
-         putenv (p);
+         char *value = strchr (argv[i], '=');
+         if (value)
+           *value++ = 0;
+         setenv (argv[i], value ? value : "", 1);
        }
     }
   return 0;
diff --git a/mail/util.c b/mail/util.c
index 108b6b1..5a5b8ca 100644
--- a/mail/util.c
+++ b/mail/util.c
@@ -52,7 +52,6 @@ util_do_command (const char *c, ...)
   const struct mail_command_entry *entry = NULL;
   char *cmd = NULL;
   va_list ap;
-  static const char *delim = "=";
   
   va_start (ap, c);
   status = vasprintf (&cmd, c, ap);
@@ -82,7 +81,7 @@ util_do_command (const char *c, ...)
            return 0;
        }
 
-      if (mu_argcv_get (cmd, delim, NULL, &argc, &argv) == 0 && argc > 0)
+      if (mu_argcv_get (cmd, NULL, NULL, &argc, &argv) == 0 && argc > 0)
        {
          char *p;
 
@@ -93,7 +92,7 @@ util_do_command (const char *c, ...)
            {
              asprintf (&p, "print %s", argv[0]);
              mu_argcv_free (argc, argv);
-             mu_argcv_get (p, delim, NULL, &argc, &argv);
+             mu_argcv_get (p, NULL, NULL, &argc, &argv);
              free (p);
            }
 
@@ -690,7 +689,7 @@ util_setenv (const char *variable, void *value, 
mail_env_data_t type,
          abort();
        }
     }
-
+    
   /* Special handling for some variables */
   if (strcmp (variable, "replyregex") == 0)
     { 
-- 
1.6.0


reply via email to

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