[Top][All Lists]
[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