From be8543812d67b47af668d3e72b7515e2f91b0dbe Mon Sep 17 00:00:00 2001 From: David Shaw Date: Thu, 1 Sep 2005 20:51:13 +0000 Subject: [PATCH] * 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. --- g10/ChangeLog | 8 ++++++++ g10/keyedit.c | 10 +++++---- g10/photoid.c | 57 +++++++++++++++++++++++++++++++++------------------ g10/photoid.h | 2 +- 4 files changed, 52 insertions(+), 25 deletions(-) diff --git a/g10/ChangeLog b/g10/ChangeLog index 519766d46..373965f53 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,11 @@ +2005-09-01 David Shaw + + * 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 * photoid.c (generate_photo_id): Enable readline completion and diff --git a/g10/keyedit.c b/g10/keyedit.c index 52247233f..6e8d944c5 100644 --- a/g10/keyedit.c +++ b/g10/keyedit.c @@ -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 ) diff --git a/g10/photoid.c b/g10/photoid.c index 5dd4e436a..885bbca01 100644 --- a/g10/photoid.c +++ b/g10/photoid.c @@ -44,12 +44,12 @@ /* 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; + if(filename==NULL) + { + char *tempname; - tty_printf("\n"); + tty_printf("\n"); - xfree(filename); + 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; } } diff --git a/g10/photoid.h b/g10/photoid.h index 031c0fee6..d13669c52 100644 --- a/g10/photoid.h +++ b/g10/photoid.h @@ -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,