aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2002-04-25 08:31:48 +0000
committerWerner Koch <[email protected]>2002-04-25 08:31:48 +0000
commita2176634aebf6e0ced4d26dd5be3bc93931a4fcb (patch)
treecd0080bd207d3f0427c9979a828d1a538fa69c94
parent2002-04-25 Marcus Brinkmann <[email protected]> (diff)
downloadgnupg-a2176634aebf6e0ced4d26dd5be3bc93931a4fcb.tar.gz
gnupg-a2176634aebf6e0ced4d26dd5be3bc93931a4fcb.zip
* call-agent.c (start_agent): Make copies of old locales and check
for setlocale. * configure.ac: Check for setlocale.
-rw-r--r--agent/command.c5
-rw-r--r--scd/command.c8
-rw-r--r--sm/ChangeLog5
-rw-r--r--sm/call-agent.c30
4 files changed, 37 insertions, 11 deletions
diff --git a/agent/command.c b/agent/command.c
index b405ec61c..e6f34fd39 100644
--- a/agent/command.c
+++ b/agent/command.c
@@ -498,8 +498,11 @@ cmd_learn (ASSUAN_CONTEXT ctx, char *line)
static int
option_handler (ASSUAN_CONTEXT ctx, const char *key, const char *value)
{
- CTRL ctrl = assuan_get_pointer (ctx);
+/* CTRL ctrl = assuan_get_pointer (ctx); */
+ /* FIXME: We should not change opt. here. It is not a problem right
+ now but as soon as we are allowing concurrent connections we mess
+ things up */
if (!strcmp (key, "display"))
{
if (opt.display)
diff --git a/scd/command.c b/scd/command.c
index f62baae98..9e0ddc502 100644
--- a/scd/command.c
+++ b/scd/command.c
@@ -438,7 +438,7 @@ cmd_pksign (ASSUAN_CONTEXT ctx, char *line)
/* We have to use a copy of the key ID because the function may use
the pin_cb which in turn uses the assuan line buffer and thus
overwriting the original line with the keyid */
- keyidstr = xtrystrdup (line);
+ keyidstr = strdup (line);
if (!keyidstr)
return ASSUAN_Out_Of_Core;
rc = card_sign (ctrl->card_ctx,
@@ -446,7 +446,7 @@ cmd_pksign (ASSUAN_CONTEXT ctx, char *line)
pin_cb, ctx,
ctrl->in_data.value, ctrl->in_data.valuelen,
&outdata, &outdatalen);
- xfree (keyidstr);
+ free (keyidstr);
if (rc)
{
log_error ("card_sign failed: %s\n", gnupg_strerror (rc));
@@ -477,7 +477,7 @@ cmd_pkdecrypt (ASSUAN_CONTEXT ctx, char *line)
if ((rc = open_card (ctrl)))
return rc;
- keyidstr = xtrystrdup (line);
+ keyidstr = strdup (line);
if (!keyidstr)
return ASSUAN_Out_Of_Core;
rc = card_decipher (ctrl->card_ctx,
@@ -485,7 +485,7 @@ cmd_pkdecrypt (ASSUAN_CONTEXT ctx, char *line)
pin_cb, ctx,
ctrl->in_data.value, ctrl->in_data.valuelen,
&outdata, &outdatalen);
- xfree (keyidstr);
+ free (keyidstr);
if (rc)
{
log_error ("card_create_signature failed: %s\n", gnupg_strerror (rc));
diff --git a/sm/ChangeLog b/sm/ChangeLog
index 639d78cb7..a594885e0 100644
--- a/sm/ChangeLog
+++ b/sm/ChangeLog
@@ -1,3 +1,8 @@
+2002-04-25 Werner Koch <[email protected]>
+
+ * call-agent.c (start_agent): Make copies of old locales and check
+ for setlocale.
+
2002-04-25 Marcus Brinkmann <[email protected]>
* call-agent.c (start_agent): Fix error handling logic so the
diff --git a/sm/call-agent.c b/sm/call-agent.c
index b3b18aef7..11b88f183 100644
--- a/sm/call-agent.c
+++ b/sm/call-agent.c
@@ -264,8 +264,14 @@ start_agent (void)
if (rc)
return map_assuan_err (rc);
}
-#ifdef LC_CTYPE
+#if defined(HAVE_SETLOCALE) && defined(LC_CTYPE)
old_lc = setlocale (LC_CTYPE, NULL);
+ if (old_lc)
+ {
+ old_lc = strdup (old_lc);
+ if (!old_lc)
+ return GNUPG_Out_Of_Core;
+ }
dft_lc = setlocale (LC_CTYPE, "");
#endif
if (opt.lc_ctype || (dft_ttyname && dft_lc))
@@ -283,14 +289,23 @@ start_agent (void)
rc = map_assuan_err (rc);
}
}
-#ifdef LC_CTYPE
+#if defined(HAVE_SETLOCALE) && defined(LC_CTYPE)
if (old_lc)
- setlocale (LC_CTYPE, old_lc);
+ {
+ setlocale (LC_CTYPE, old_lc);
+ free (old_lc);
+ }
#endif
if (rc)
return rc;
-#ifdef LC_MESSAGES
+#if defined(HAVE_SETLOCALE) && defined(LC_MESSAGES)
old_lc = setlocale (LC_MESSAGES, NULL);
+ if (old_lc)
+ {
+ old_lc = strdup (old_lc);
+ if (!old_lc)
+ return GNUPG_Out_Of_Core;
+ }
dft_lc = setlocale (LC_MESSAGES, "");
#endif
if (opt.lc_messages || (dft_ttyname && dft_lc))
@@ -308,9 +323,12 @@ start_agent (void)
rc = map_assuan_err (rc);
}
}
-#ifdef LC_MESSAGES
+#if defined(HAVE_SETLOCALE) && defined(LC_MESSAGES)
if (old_lc)
- setlocale (LC_MESSAGES, old_lc);
+ {
+ setlocale (LC_MESSAGES, old_lc);
+ free (old_lc);
+ }
#endif
return rc;