* photoid.h, photoid.c (generate_photo_id): Allow passing in a
authorDavid Shaw <dshaw@jabberwocky.com>
Thu, 1 Sep 2005 20:51:13 +0000 (20:51 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Thu, 1 Sep 2005 20:51:13 +0000 (20:51 +0000)
suggested filename.

* keyedit.c (keyedit_menu, menu_adduid): Call it here so "addphoto
filename" works.

g10/ChangeLog
g10/keyedit.c
g10/photoid.c
g10/photoid.h

index 519766d..373965f 100644 (file)
@@ -1,3 +1,11 @@
+2005-09-01  David Shaw  <dshaw@jabberwocky.com>
+
+       * photoid.h, photoid.c (generate_photo_id): Allow passing in a
+       suggested filename.
+
+       * keyedit.c (keyedit_menu, menu_adduid): Call it here so "addphoto
+       filename" works.
+
 2005-08-31  David Shaw  <dshaw@jabberwocky.com>
 
        * photoid.c (generate_photo_id): Enable readline completion and
index 5224723..6e8d944 100644 (file)
@@ -51,7 +51,8 @@ static void show_prefs( PKT_user_id *uid, PKT_signature *selfsig, int verbose);
 static void show_key_with_all_names( KBNODE keyblock, int only_marked,
            int with_revoker, int with_fpr, int with_subkeys, int with_prefs );
 static void show_key_and_fingerprint( KBNODE keyblock );
-static int menu_adduid( KBNODE keyblock, KBNODE sec_keyblock, int photo );
+static int menu_adduid( KBNODE keyblock, KBNODE sec_keyblock,
+                       int photo, const char *photo_name );
 static void menu_deluid( KBNODE pub_keyblock, KBNODE sec_keyblock );
 static int menu_delsig( KBNODE pub_keyblock );
 static int menu_clean_sigs_from_uids(KBNODE keyblock);
@@ -1788,7 +1789,7 @@ keyedit_menu( const char *username, STRLIST locusr,
            /* fall through */
 
          case cmdADDUID:
-           if( menu_adduid( keyblock, sec_keyblock, photo ) )
+           if( menu_adduid( keyblock, sec_keyblock, photo, arg_string ) )
              {
                update_trust = 1;
                redisplay = 1;
@@ -2910,7 +2911,8 @@ no_primary_warning(KBNODE keyblock)
  * Return true if there is a new user id
  */
 static int
-menu_adduid( KBNODE pub_keyblock, KBNODE sec_keyblock, int photo)
+menu_adduid( KBNODE pub_keyblock, KBNODE sec_keyblock,
+            int photo, const char *photo_name)
 {
     PKT_user_id *uid;
     PKT_public_key *pk=NULL;
@@ -2976,7 +2978,7 @@ menu_adduid( KBNODE pub_keyblock, KBNODE sec_keyblock, int photo)
            }
        }
 
-      uid = generate_photo_id(pk);
+      uid = generate_photo_id(pk,photo_name);
     } else
       uid = generate_user_id();
     if( !uid )
index 5dd4e43..885bbca 100644 (file)
 
 /* Generate a new photo id packet, or return NULL if canceled */
 PKT_user_id *
-generate_photo_id(PKT_public_key *pk)
+generate_photo_id(PKT_public_key *pk,const char *photo_name)
 {
   PKT_user_id *uid;
   int error=1,i;
   unsigned int len;
-  char *filename=NULL;
+  char *filename;
   byte *photo=NULL;
   byte header[16];
   IOBUF file;
@@ -65,34 +65,43 @@ generate_photo_id(PKT_public_key *pk)
 #define EXTRA_UID_NAME_SPACE 71
   uid=xmalloc_clear(sizeof(*uid)+71);
 
-  tty_printf(_("\nPick an image to use for your photo ID.  "
-           "The image must be a JPEG file.\n"
-          "Remember that the image is stored within your public key.  "
-          "If you use a\n"
-          "very large picture, your key will become very large as well!\n"
-          "Keeping the image close to 240x288 is a good size to use.\n"));
+  if(photo_name && *photo_name)
+    filename=make_filename(photo_name,(void *)NULL);
+  else
+    {
+      tty_printf(_("\nPick an image to use for your photo ID."
+                  "  The image must be a JPEG file.\n"
+                  "Remember that the image is stored within your public key."
+                  "  If you use a\n"
+                  "very large picture, your key will become very large"
+                  " as well!\n"
+                  "Keeping the image close to 240x288 is a good size"
+                  " to use.\n"));
+      filename=NULL;
+    }
 
   while(photo==NULL)
     {
-      char *tempname;
-
-      tty_printf("\n");
+      if(filename==NULL)
+       {
+         char *tempname;
 
-      xfree(filename);
+         tty_printf("\n");
 
-      tty_enable_completion(NULL);
+         tty_enable_completion(NULL);
 
-      tempname=cpr_get("photoid.jpeg.add",
-                      _("Enter JPEG filename for photo ID: "));
+         tempname=cpr_get("photoid.jpeg.add",
+                          _("Enter JPEG filename for photo ID: "));
 
-      tty_disable_completion();
+         tty_disable_completion();
 
-      filename=make_filename(tempname,(void *)NULL);
+         filename=make_filename(tempname,(void *)NULL);
 
-      xfree(tempname);
+         xfree(tempname);
 
-      if(strlen(filename)==0)
-       goto scram;
+         if(strlen(filename)==0)
+           goto scram;
+       }
 
       file=iobuf_open(filename);
       if (file && is_secured_file (iobuf_get_fd (file)))
@@ -105,6 +114,8 @@ generate_photo_id(PKT_public_key *pk)
        {
          log_error(_("unable to open JPEG file `%s': %s\n"),
                    filename,strerror(errno));
+         xfree(filename);
+         filename=NULL;
          continue;
        }
 
@@ -116,6 +127,8 @@ generate_photo_id(PKT_public_key *pk)
                            _("Are you sure you want to use it? (y/N) ")))
          {
            iobuf_close(file);
+           xfree(filename);
+           filename=NULL;
            continue;
          }
        }
@@ -131,6 +144,8 @@ generate_photo_id(PKT_public_key *pk)
          log_error(_("`%s' is not a JPEG file\n"),filename);
          xfree(photo);
          photo=NULL;
+         xfree(filename);
+         filename=NULL;
          continue;
        }
 
@@ -153,6 +168,8 @@ generate_photo_id(PKT_public_key *pk)
              free_attributes(uid);
              xfree(photo);
              photo=NULL;
+             xfree(filename);
+             filename=NULL;
              continue;
            }
        }
index 031c0fe..d13669c 100644 (file)
@@ -26,7 +26,7 @@
 
 #include "packet.h"
 
-PKT_user_id *generate_photo_id(PKT_public_key *pk);
+PKT_user_id *generate_photo_id(PKT_public_key *pk,const char *filename);
 int parse_image_header(const struct user_attribute *attr,byte *type,u32 *len);
 char *image_type_to_string(byte type,int style);
 void show_photos(const struct user_attribute *attrs,