2002-04-25 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Wed, 24 Apr 2002 23:11:00 +0000 (23:11 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Wed, 24 Apr 2002 23:11:00 +0000 (23:11 +0000)
* curses/pinentry-curses.c (dialog_create): Grok the new ok and
cancel members to set the pbutton texts, rather than parsing the
prompt in the confirm case.

* pinentry/pinentry.h (struct pinentry): Add new members ok and cancel.
* pinentry/pinentry.c (register_commands): Add new commands SETOK
and SETCANCEL to set button texts.
(struct pinentry pinentry): Add initializers for new members.
(cmd_setok): New function.
(cmd_setcancel): Likewise.

ChangeLog
curses/pinentry-curses.c
pinentry/pinentry.c
pinentry/pinentry.h

index b57b619..a6be7c4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
+
+       * curses/pinentry-curses.c (dialog_create): Grok the new ok and
+       cancel members to set the pbutton texts, rather than parsing the
+       prompt in the confirm case.
+
+       * pinentry/pinentry.h (struct pinentry): Add new members ok and cancel.
+       * pinentry/pinentry.c (register_commands): Add new commands SETOK
+       and SETCANCEL to set button texts.
+       (struct pinentry pinentry): Add initializers for new members.
+       (cmd_setok): New function.
+       (cmd_setcancel): Likewise.
+
 2002-04-24  Marcus Brinkmann  <marcus@g10code.de>
 
        * curses/pinentry-curses.c (dialog_create): Add '<' and '>' around
index 868875c..db3c457 100644 (file)
@@ -162,57 +162,47 @@ dialog_create (pinentry_t pinentry, dialog_t dialog)
     }
   if (pinentry->prompt)
     {
-      if (pinentry->pin)
+      prompt = convert_utf8_string (pinentry->lc_ctype,
+                                   pinentry->prompt);
+      if (!prompt)
        {
-         prompt = convert_utf8_string (pinentry->lc_ctype,
-                                       pinentry->prompt);
-         if (!prompt)
-           {
-             err = 1;
-             goto out;
-           }
+         err = 1;
+         goto out;
        }
-      else
+    }
+  if (pinentry->ok)
+    {
+      int len = strlen (pinentry->ok);
+      ok = malloc (len + 3);
+      if (!ok)
        {
-         char *split;
-         split = strchr (pinentry->prompt, '|');
-         if (split)
-           {
-             int len = split - pinentry->prompt;
-
-             ok = malloc (len + 3);
-             if (!ok)
-               {
-                 err = 1;
-                 goto out;
-               }
-             ok[0] = '<';
-             memcpy (&ok[1], pinentry->prompt, len);
-             ok[len + 1] = '>';
-             ok[len + 2] = '\0';
-
-             len = strlen (++split);
-             cancel = malloc (len + 3);
-             if (!cancel)
-               {
-                 err = 1;
-                 goto out;
-               }
-             cancel[0] = '<';
-             memcpy (&cancel[1], split, len);
-             cancel[len + 1] = '>';
-             cancel[len + 2] = '\0';
-           }
+         err = 1;
+         goto out;
+       }
+      ok[0] = '<';
+      memcpy (&ok[1], pinentry->ok, len);
+      ok[len + 1] = '>';
+      ok[len + 2] = '\0';
+    }
+  if (pinentry->cancel)
+    {
+      int len = strlen (pinentry->cancel);
+      cancel = malloc (len + 3);
+      if (!cancel)
+       {
+         err = 1;
+         goto out;
        }
+      cancel[0] = '<';
+      memcpy (&cancel[1], pinentry->cancel, len);
+      cancel[len + 1] = '>';
+      cancel[len + 2] = '\0';
     }
+
   dialog->ok = convert_utf8_string (pinentry->lc_ctype,
                                    ok ? ok : STRING_OK);
   dialog->cancel = convert_utf8_string (pinentry->lc_ctype,
                                        cancel ? cancel : STRING_CANCEL);
-  if (ok)
-    free (ok);
-  if (cancel)
-    free (cancel);
   if (!dialog->ok || !dialog->cancel)
     {
       err = 1;
@@ -420,6 +410,10 @@ dialog_create (pinentry_t pinentry, dialog_t dialog)
   addstr (dialog->cancel);
 
  out:
+  if (ok)
+    free (ok);
+  if (cancel)
+    free (cancel);
   if (description)
     free (description);
   if (error)
index 5553b2e..399dd3d 100644 (file)
@@ -38,6 +38,8 @@ struct pinentry pinentry =
     NULL,      /* Description.  */
     NULL,      /* Error.  */
     NULL,      /* Prompt.  */
+    NULL,      /* Ok button.  */
+    NULL,      /* Cancel button.  */
     NULL,      /* PIN.  */
     2048,      /* PIN length.  */
     0,         /* Display.  */
@@ -330,6 +332,40 @@ cmd_seterror (ASSUAN_CONTEXT ctx, char *line)
 
 
 static int
+cmd_setok (ASSUAN_CONTEXT ctx, char *line)
+{
+  char *newo;
+  newo = malloc (strlen (line) + 1);
+
+  if (!newo)
+    return ASSUAN_Out_Of_Core;
+
+  strcpy (newo, line);
+  if (pinentry.ok)
+    free (pinentry.ok);
+  pinentry.ok = newo;
+  return 0;
+}
+
+
+static int
+cmd_setcancel (ASSUAN_CONTEXT ctx, char *line)
+{
+  char *newc;
+  newc = malloc (strlen (line) + 1);
+
+  if (!newc)
+    return ASSUAN_Out_Of_Core;
+
+  strcpy (newc, line);
+  if (pinentry.cancel)
+    free (pinentry.cancel);
+  pinentry.cancel = newc;
+  return 0;
+}
+
+
+static int
 cmd_getpin (ASSUAN_CONTEXT ctx, char *line)
 {
   int result;
@@ -398,6 +434,8 @@ register_commands (ASSUAN_CONTEXT ctx)
       { "SETDESC",    0,  cmd_setdesc },
       { "SETPROMPT",  0,  cmd_setprompt },
       { "SETERROR",   0,  cmd_seterror },
+      { "SETOK",      0,  cmd_setok },
+      { "SETCANCEL",  0,  cmd_setcancel },
       { "GETPIN",     0,  cmd_getpin },
       { "CONFIRM",    0,  cmd_confirm },
       { NULL }
index c41656d..a8b37ce 100644 (file)
@@ -26,6 +26,10 @@ struct pinentry
   char *error;
   /* The prompt to display, or NULL.  */
   char *prompt;
+  /* The OK button text to display, or NULL.  */
+  char *ok;
+  /* The Cancel button text to display, or NULL.  */
+  char *cancel;
   /* The buffer to store the secret into.  */
   char *pin;
   /* The length of the buffer.  */